2017-03-08 55 views
0

我正在使用Sql Server!如何從條件的sql server中獲取數據?

我的問題是:我的客戶表中有15000條記錄,我想在一天內處理前5000條記錄,第二天我每天處理下5000條記錄。每天的操作都是在有限的記錄中執行,客戶表的數據經常變化。還可以獲取未處理的待處理記錄的數量。請給你有用的建議如何做到這一點。感謝

更多細節:使用

  1. 日期時間戳在表
  2. 字段:[FIRST_NAME],[middle_name],[姓氏],[創建],[CREATED_BY],[CUSTOMER_NUMBER]
+0

你可以發表表的模式嗎?如果行已被處理,您是否可以建議您是否保留日期時間戳記?如果您的操作非常簡單,那麼從DataTable中選擇top 5000 *,其中datetimeprocessed爲空orderCodeCol ASC –

+0

客戶表更改如何影響您的日常處理? –

+0

,[FIRST_NAME] ,[middle_name] ,[姓氏] ,[創建] ,[CREATED_BY] ,[CUSTOMER_NUMBER] –

回答

1

最簡單的方法可以是通過添加兩列(如果不存在)。 updated_atprocessed_atupdated_at列將更新行更新。當您在日常工作中開始處理該行時,將會更新processed_at列。現在你的查詢會是這樣的。

select * from your_table where updated_at > processed_at limit 5000; 
1

我會假設你有某種形式的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) 
相關問題