2013-05-14 89 views
-3

之間的時間差我有以下格式的表:SQL:兩個獨立的行

id | Date A 
---------------- 
1 | 05/02/12 
1 | 05/05/12 
1 | 05/08/12 
3 | 05/01/12 
3 | 05/05/12 
3 | 05/06/12 

現在,我想抓住每一個ID和組由ID的最新(最大)的日期。 所以我的SQL輸出應該是:

id | Date A 
---------------- 
1 | 05/08/12 
3 | 05/06/12 

的日期不一定訂單。 有人可以給我一個關於如何做到這一點的提示嗎?

謝謝!

+1

「的日期並不一定是爲了」 - 因爲表有沒有內在的秩序,對於任何查詢,其中,順序是有意義的,你必須使用可用的列來定義您想要的訂單,但這並不合理。 – 2013-05-14 13:59:46

回答

4
select id, max([Date A]) as 'MaxDate' 
from table 
group by id 
1

我會爲此使用窗口函數。

SELECT DISTINCT id, MAX([Date A]) OVER (PARTITION BY id) AS 'Date A' 
    FROM table 

窗口函數的好處在於,您不必在函數中獲取輸出結果所需的GROUP BY事物。他們也非常快。

這裏是BOL:http://msdn.microsoft.com/en-us/library/ms189461.aspx 這裏是窗函數的一些詳細信息:http://en.wikipedia.org/wiki/Select_(SQL)#Window_function

+0

這會導致[輸出中有6行](http://sqlfiddle.com/#!6/525ec/2),這不是OP想要的。 – 2013-05-14 14:45:04

+0

D'oh。添加DISTINCT。 http://sqlfiddle.com/#!6/525ec/3 – 2013-05-14 17:26:32