2017-07-18 59 views
1

我有一個3列的表格:Id,NumberDate,其中IDNumber一起構成一個主鍵。該表是這樣的:獲取比當前行數據更少的最大數據

+----+--------+------------------+--+ 
    | ID | Number | Date    | | 
    +----+--------+------------------+--+ 
    | 1 | 1234 | 10-12-13 1:05:33 | | 
    +----+--------+------------------+--+ 
    | 1 | 2314 | 10-12-13 1:10:32 | | 
    +----+--------+------------------+--+ 
    | 2 | 1234 | 10-13-14 3:04:55 | | 
    +----+--------+------------------+--+ 
    | 3 | 4312 | 05-12-13 5:05:00 | | 
    +----+--------+------------------+--+ 
    | 3 | 1234 | 04-13-12 3:12:53 | | 
    +----+--------+------------------+--+ 
    | 4 | 4312 | 05-12-11 5:05:00 | | 
    +----+--------+------------------+--+ 

現在,我要爲一個數字,是小於日期每一行的最大日期,不論ID的。所以,對於ID = 1和數字= 1234,我想要1234年的最大日期但小於它在那一行的日期。結果應該是04-13-12 3:12:53。同樣,對於ID = 2和Number = 1234,結果應該是10-12-13 1:05:33。

所以輸出應該是這樣的:

+----+--------+------------------+------------------+ 
    | ID | Number | Date    | Prev Date  | 
    +----+--------+------------------+------------------+ 
    | 1 | 1234 | 10-12-13 1:05:33 | 04-13-12 3:12:53 | 
    +----+--------+------------------+------------------+ 
    | 1 | 2314 | 10-12-13 1:10:32 | 10-12-13 1:10:32 | 
    +----+--------+------------------+------------------+ 
    | 2 | 1234 | 10-13-14 3:04:55 | 10-12-13 1:05:33 | 
    +----+--------+------------------+------------------+ 
    | 3 | 4312 | 05-12-13 5:05:00 | 05-12-11 5:05:00 | 
    +----+--------+------------------+------------------+ 
    | 3 | 1234 | 04-13-12 3:12:53 | 04-13-12 3:12:53 | 
    +----+--------+------------------+------------------+ 
    | 4 | 4312 | 05-12-11 5:05:00 | 05-12-11 5:05:00 | 
    +----+--------+------------------+------------------+ 

希望這是顯而易見的。我正在繪製一個完整的空白,以瞭解如何構建我的查詢。謝謝。

+0

您應該編輯問題,以表格格式提供樣本結果。 –

+0

對不起,我只是添加了我需要的輸出。謝謝 –

回答

1

我覺得你只是想累積最大:

select t.*, 
     max(date) over (partition by id 
         order by date 
         rows between unbounded preceding and 1 preceding 
        ) as prev_date 
from t; 

編輯:

基於對這個問題的例子,你可能想:

select t.*, 
     max(date) over (partition by number 
         order by date 
         rows between unbounded preceding and 1 preceding 
        ) as prev_date 
from t; 
+0

你能解釋一下累積最大值是什麼意思嗎?對不起,我不熟悉術語 –

+0

「running max」?它只是特定行的最大值(或者在這種情況下,對於之前的行)。 –

+0

應該通過數字分區來滿足要求(「_for ID = 2和Number = 1234,結果應該是10-12-13 1:05:33_」 - 您的解決方案將爲null) – Abelisto

相關問題