各ユーザーの最新の記録日付をSQLでクエリするにはどうすればいいですか?質問する

各ユーザーの最新の記録日付をSQLでクエリするにはどうすればいいですか?質問する

ユーザーがいつログオンしたかに関するエントリを収集したテーブルがあります。

username, date,      value
--------------------------
brad,     1/2/2010,  1.1
fred,     1/3/2010,  1.0
bob,      8/4/2009,  1.5
brad,     2/2/2010,  1.2
fred,     12/2/2009, 1.3

etc..

各ユーザーの最新日付を取得するクエリを作成するにはどうすればよいですか?

更新:最新の日付に合わせた値が必要であることを忘れていました。

ベストアンサー1

これは、ほぼすべての DB エンジンで機能するシンプルな昔ながらのアプローチですが、重複には注意する必要があります。

select t.username, t.date, t.value
from MyTable t
inner join (
    select username, max(date) as MaxDate
    from MyTable
    group by username
) tm on t.username = tm.username and t.date = tm.MaxDate

ウィンドウ関数を使用すると、重複した値による重複レコードの問題を回避できるためdate、データベース エンジンで許可されている場合は、次のようにすることができます。

select x.username, x.date, x.value 
from (
    select username, date, value,
        row_number() over (partition by username order by date desc) as _rn
    from MyTable 
) x
where x._rn = 1

おすすめ記事