データベースから必要な行を取得する最良の方法を見つけようとしています。
データベース テーブル:
id user cat time
1 5 1 123
2 5 1 150
3 5 2 160
4 5 3 100
DISTINCT cat ... WHERE user=5
大切に受け取りたいMAX time
。どうすれば効率的にそれを行うことができますか?
で集計関数を使用する必要がありますGROUP BY
。
select user, cat, max(time) as Time
from yourtable
group by user, cat
デモで SQL Fiddle を参照してください
列を含めたい場合はid
、サブクエリを使用できます。
select t1.id,
t1.user,
t1.cat,
t1.time
from yourtable t1
inner join
(
select max(time) Time, user, cat
from yourtable
group by user, cat
) t2
on t1.time = t2.time
and t1.user = t2.user
and t1.cat = t2.cat
SQL Fiddle with Demoを参照してください。サブクエリを使用して、各行id
で返される値がmax(time)
正しい ID であることを確認しました。