SQL获取最新的日期记录

Nat*_*Pet 2 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    
Run Code Online (Sandbox Code Playgroud)

我需要做的是获取给定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    
Run Code Online (Sandbox Code Playgroud)

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

Con*_*rix 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
Run Code Online (Sandbox Code Playgroud)

另一个选择是使用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
Run Code Online (Sandbox Code Playgroud)