tsql -group by by max datetime in rows

时间:2012-08-30 15:54:36

标签: tsql

我有一张桌子,它的数据如下:

 id         name       date
 ---------  ---------  ----------
 1          a          2012-08-30 10:36:27.393
 1          b          2012-08-30 14:36:27.393
 2          c          2012-08-30 13:36:27.393
 2          d          2012-08-30 16:36:27.393

我使用此查询检索最大日期时间:

SELECT id,Max(date) as mymaxdate
FROM table1
group by id

这个查询向我提供了两行:

1     2012-08-30 14:36:27.393
2     2012-08-30 16:36:27.393

这是正确的,但如何更改它以检索此结果?

1   b  2012-08-30 14:36:27.393
2   d  2012-08-30 16:36:27.393

由于

2 个答案:

答案 0 :(得分:8)

对于SQL Server 2005 +

WITH cteMaxDate AS (
    SELECT id, name, date, 
           ROW_NUMBER() OVER(PARTITION BY id ORDER BY date DESC) AS RowNum
        FROM table1
)
SELECT id, name, date
    FROM cteMaxDate
    WHERE RowNum = 1;

答案 1 :(得分:2)

其中一个选项:

select 
    t1.id
    ,t1.name
    ,t1.date 
from 
    table1 t1
    inner join (
        SELECT id,Max(date) as mymaxdate
        FROM table1
        group by id
    ) mt1
        on t1.id = mt1.id
        and t1.date = mt1.mymaxdate