MySQL组按某种类型选择最新一行?

时间:2011-07-14 13:21:35

标签: mysql group-by aggregate

想象一下包含列类型,日期,消息的表。有些行看起来像这样(键入| date | message):

1 | 1310572318 | Hello
1 | 1310572317 | Hi
2 | 1310572315 | Wassup
3 | 1310572312 | Yo
3 | 1310572311 | Hey
3 | 1310572309 | Eyo
1 | 1310572305 | Hello
1 | 1310572303 | Good Day

是否可以按类型对它们进行分组,然后选择最新的(按日期排序),结果如下:

1 | 1310572318 | Hello
2 | 1310572315 | Wassup
3 | 1310572312 | Yo
1 | 1310572305 | Hello

我很确定我必须使用一些MySQL Aggregate函数,但我不是很擅长它们,所以我在这里要求一些帮助。

3 个答案:

答案 0 :(得分:2)

没有任何aggregate可以使用不同的列,以便您可以获取具有最新日期的消息。

这可能会有所帮助:

SELECT 
    `type`, 
    MAX(`date`) AS `max_date`, 
    (SELECT `t2`.`message` FROM `table` AS `t2` WHERE `t2`.`type` = `t1`.`type` ORDER BY `t2`.`date` DESC LIMIT 1)
FROM `table` AS `t1`
GROUP BY `type`

答案 1 :(得分:1)

请尝试:

Select type, date, message from tableName
group by type
having min(date)

请注意,最后一行无效

 1 | 1310572305 | Hello

答案 2 :(得分:-1)

假设您的日期表示为您在此处显示的整数,您可以尝试以下操作:

SELECT type, MAX(date), message
FROM myDB.myTable
GROUP BY type;

除非我在这里缺少一些基本的东西,否则这应该可以解决问题。