2017-07-21 45 views
0

我要重複上一個表,並通過啓動日期得到下一行訂貨記錄,但我希望通過ID處理行ID例如要做到這一點:如何檢索集合中下一行的值?

主表

ID  |   StartingDate   |  PlannedFinishDate 

1   2017-01-13 17:48:05.150   2017-01-15 12:00:00.00 
1   2017-01-14 14:15:09.000   2017-01-16 12:00:00.00 
1   2017-01-16 09:40:30.000   2017-01-18 12:00:00.00 
2   2017-02-06 12:00:00.000   2017-02-10 12:00:00.00 
2   2017-03-01 13:45:00.000   2017-03-05 12:00:00.00 
3   2017-02-09 11:31:16.830   2017-02-11 12:00:00.00 

表獲取後從下一行開始:

ID  |   StartingDate   |  PlannedFinishDate 

1   2017-01-13 17:48:05.150   2017-01-16 12:00:00.00 
1   2017-01-14 14:15:09.000   2017-01-18 12:00:00.00 
1   2017-01-16 09:40:30.000   NULL 
2   2017-02-06 12:00:00.000   2017-03-05 12:00:00.00 
2   2017-03-01 13:45:00.000   NULL 
3   2017-02-09 11:31:16.830   NULL 
+1

有一個表中沒有 「下」 行。除非明確使用'ORDER BY'子句,否則有* no *次序。您可能會意外地*按照它們存儲的順序返回行*如果*數據庫使用單個核心進行處理並且沒有可能改變順序的操作。如果使用兩個內核,orderry是任意的 –

+0

爲什麼*迭代*?表格不是文件。您一次讀取想要的行,而不是逐行讀取。爲什麼不使用'ORDER BY ID,StartingDate'並檢索所需的所有行? –

+0

當然可以迭代通過一個表,它被稱爲**自我加入**。我認爲我的例子是解釋性的 – Kayzer

回答

0

看來你實際上並沒有問過迭代。您似乎想要檢索每個開始日期的計劃完成日期的下一個

您可以使用LEAD函數輕鬆實現。該函數返回結果集中的下一個值。它需要一個ORDER BY子句才能知道下一行是什麼。它還允許您指定一個PARTITION BY子句來分區結果集。

既然你想找到每個ID的下一個計劃完成日期,則需要PARTITION BY ID

select 
    ID, 
    StartingDate, 
    LEAD(PlannedFinishDate) OVER (PARTITION BY ID ORDER BY StartingDate ASC) 
     AS NextFinishDate 
FROM SomeTable 

如果沒有下一個值,則返回NULL。

這個片段

declare @table table (ID int, StartingDate datetime, PlannedFinishDate datetime) 
insert into @table (ID,StartingDate,PlannedFinishDate) 
values 
(1,'2017-01-13 17:48:05.150','2017-01-15 12:00:00.008'), 
(1,'2017-01-14 14:15:09.000','2017-01-16 12:00:00.008'), 
(1,'2017-01-16 09:40:30.000','2017-01-18 12:00:00.008'), 
(2,'2017-02-06 12:00:00.000','2017-02-10 12:00:00.008'), 
(2,'2017-03-01 13:45:00.000','2017-03-05 12:00:00.008'), 
(3,'2017-02-09 11:31:16.830','2017-02-11 12:00:00.008') 

select 
    ID, 
    StartingDate, 
    LEAD(PlannedFinishDate) OVER (PARTITION BY ID ORDER BY StartingDate ASC) 
     AS NextFinishDate 
FROM @table 

返回:

ID StartingDate   NextFinishDate 
1 2017-01-13 17:48:05.150 2017-01-16 12:00:00.007 
1 2017-01-14 14:15:09.000 2017-01-18 12:00:00.007 
1 2017-01-16 09:40:30.000 NULL 
2 2017-02-06 12:00:00.000 2017-03-05 12:00:00.007 
2 2017-03-01 13:45:00.000 NULL 
3 2017-02-09 11:31:16.830 NULL 
相關問題