2012-03-01 94 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。我正要创建一个样本,但它看起来像康拉德已经做到了:)