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

您将希望将聚合函数与 a 一起使用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 回答