ユーザーがいつログオンしたかに関するエントリを収集したテーブルがあります。
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