SQL获取最新的日期记录

时间:2012-03-01 15:39:17

标签: sql sql-server sql-server-2008-r2

我的查询包含以下内容

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    

我尝试使用Top(1)和基于ID的组,但是没有成功

2 个答案:

答案 0 :(得分: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

另一种选择是使用ANTI 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 :(得分:1)

您想使用ROW_NUMBER() OVER。我即将创建一个样本,但看起来康拉德已经做过了:)