1

データベースから必要な行を取得する最良の方法を見つけようとしています。

データベース テーブル:

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。どうすれば効率的にそれを行うことができますか?

4

1 に答える 1

2

で集計関数を使用する必要があります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 であることを確認しました。

于 2013-03-19T16:19:58.827 に答える