2012-03-01 117 views
2

我有了一個查詢最新的日期下面SQL獲取記錄

DATE     ID    Name 
---      ------------ ----------- 
2012-02-07 11:24:53.000 00001-KK-12 Smith, JEN 
2011-12-28 00:00:00.000 00001-KK-12 Bearson, Matt 
2012-02-13 10:38:18.000 00003-KJ-12 Wick, Julian  

我需要做的是讓最新的日期爲給定的ID,然後顯示結果

在此

所以情況下,這將是:

DATE     ID    Name 
---      ------------ ----------- 
2012-02-07 11:24:53.000 00001-KK-12 Smith, JEN 
2012-02-13 10:38:18.000 00003-KJ-12 Wick, Julian  

我試圖用頂部(1)與一組通過對基於ID,但沒有成功

回答

9

有幾種方法可以做到這一點。一種方法是使用row_number。它有用的,如果有可能在日期有一個領帶,你想任意選擇一個。

WITH CTE AS (
SELECT 
    row_number() over (partition by id order by date desc) rn, 
    date, 
    id, 
    name 

FROM 
    table) 
SELECT date, 
     id, 
     name 
FROM CTE WHERE RN = 1 

另一種選擇是使用抗JOIN(沒有聚集體沒有CTE)如下,但將返回多個結果,如果有一個並列第一對於給定的ID。

SELECT 
     t.date, 
     t.id, 
     t.name 
    FROM 
     table t 
     LEFT JOIN table t1 
     WHERE t.Id = t1.id 
      and t.Date < t1.Date 
    WHERE 
     t1.Date is null 
1

您想使用ROW_NUMBER() OVER。我正要創建一個樣本,但它看起來像康拉德已經做到了:)