4

テーブルがあり、そのデータは次のようになります。

 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

このクエリでは、次のような 2 つの行が返されます。

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

ありがとう

4

2 に答える 2

8

SQLServer2005以降の場合

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;
于 2012-08-30T16:32:23.377 に答える
2

オプションの 1 つ:

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
于 2012-08-30T16:30:13.923 に答える