2016-06-01 40 views
0

我有一個表獲得一排兩組由約束

TIMESTAMP     ID  Name 
5/30/2016 11:45   1  Ben 
5/30/2016 11:45   2  Ben 
5/30/2016 23:15   2  Ben 
5/30/2016 7:30    1  Peter 
5/30/2016 6:05    1  Peter 
5/30/2016 14:40   2  May 
5/30/2016 1:05    1  May 

現在,我需要得到MIN時間戳爲每個不同的名稱。 然後,如果有多個MIN條目,請選擇具有MAX ID的條目。

所以結果應該是

TIMESTAMP     ID  Name 
5/30/2016 11:45   2  Ben 
5/30/2016 6:05    1  Peter 
5/30/2016 1:05    1  May 

我嘗試使用下面的查詢:

SELECT MIN(TIMESTAMP),名字來自TBLSAMPLE其中timestamp BETWEEN TO_DATE( '二○一六年五月三十○日',' MM/DD/YYYY')和TO_DATE('5/30/2016','MM/DD/YYYY')+ 1 GROUP BY NAME

我可以得到最短時間。但是,一旦我添加了MAX(ID),結果會返回一個不匹配任何行的條目。

您的幫助真的很感激。

回答

1

你可以用row_number()做到這一點:

select t.* 
from (select t.*, 
      row_number() over (partition by name order by timestamp asc, id desc) as seqnum 
     from tblsample t 
    ) t 
where seqnum = 1; 

你的問題沒有指定的日期的條件。但是,如果要添加where子句,請將其添加到子查詢中。

+0

非常感謝你,這是我正在尋找的。此外,我還了解了一些分析功能。 – Strauss