2013-03-19 85 views
1

我想弄清楚从数据库中获取所需行的最佳方法。mysql提取最大值的行

数据库表:

id user cat time 
1 5 1 123 
2 5 1 150 
3 5 2 160 
4 5 3 100 

我想带DISTINCT cat ... WHERE user=5MAX time值。我应该如何有效地做到这一点?

回答

3

你将要使用的聚合函数具有GROUP BY

select user, cat, max(time) as Time 
from yourtable 
group by user, cat 

SQL Fiddle with Demo

如果要包括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。我使用子查询来确保每个max(time)行返回的id值是正确的ID。

+0

辉煌,第一个例子适合我:)谢谢! – fshock 2013-03-19 16:31:00

+0

@fshock很高兴它的作品! :) – Taryn 2013-03-19 16:33:14