如何从条件的sql server中获取数据?
问题描述:
我正在使用Sql Server!如何从条件的sql server中获取数据?
我的问题是:我的客户表中有15000条记录,我想在一天内处理前5000条记录,第二天我每天处理下5000条记录。每天的操作都是在有限的记录中执行,客户表的数据经常变化。还可以获取未处理的待处理记录的数量。请给你有用的建议如何做到这一点。感谢
更多细节:使用
- 日期时间戳在表
- 字段:[FIRST_NAME],[middle_name],[姓氏],[创建],[CREATED_BY],[CUSTOMER_NUMBER]
答
最简单的方法可以是通过添加两列(如果不存在)。 updated_at
和processed_at
。 updated_at
列将更新行更新。当您在日常工作中开始处理该行时,将会更新processed_at
列。现在你的查询会是这样的。
select * from your_table where updated_at > processed_at limit 5000;
答
我会假设你有某种形式的ID在你的表...
所以你设置你的程序的开始日期,并比较这(我用“2016- 01-01'):
with CTE as
(
select t1.*, row_number() over(order by customer_id) as r_ord
from Mytable t1
)
select CTE.*
from CTE
where (mod(datediff(day, '2016-01-01', getdate()),3) = 0 and r_ord <= 5000)
or (mod(datediff(day, '2016-01-01', getdate()),3) = 1 and r_ord between 5001 and 10000)
or (mod(datediff(day, '2016-01-01', getdate()),3) = 2 and r_ord > 10000)
你可以发表表的模式吗?如果行已被处理,您是否可以建议您是否保留日期时间戳记?如果您的操作非常简单,那么从DataTable中选择top 5000 *,其中datetimeprocessed为空orderCodeCol ASC –
客户表更改如何影响您的日常处理? –
,[FIRST_NAME] ,[middle_name] ,[姓氏] ,[创建] ,[CREATED_BY] ,[CUSTOMER_NUMBER] –