我试图找出从数据库中获取所需行的最佳方法。
数据库表:
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
价值。我应该如何以有效的方式做到这一点?
您将希望将聚合函数与 a 一起使用GROUP BY
:
select user, cat, max(time) as Time
from yourtable
group by user, cat
如果要包含该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。