MySQL group by和aggregate,如何在最后得到想要的id?

时间:2012-03-30 10:24:38

标签: mysql aggregate

我有这个查询

SELECT MAX(`sms`.`datetime`) as `datetime`, `sms`.`id_phone`
FROM `user`, `sms`                   
WHERE `user`.`id` = `sms`.`user_id`                   
AND (`user`.`id` = '42')                   
GROUP BY `sms`.`id_phone`

如何获取与返回行对应的id字段? 如果我SELECT MAX(sms.datetime) as datetime, sms.id_phone, sms.id它将不会给我与MAX(日期时间)行相对应的ID,但是来自该组的任何ID ...

我无法弄明白。 感谢

2 个答案:

答案 0 :(得分:1)

一种简单的方法是使用子查询:

SELECT sms.id from sms
WHERE sms.datetime = 
  SELECT MAX(sms.datetime)
  FROM user, sms                   
  WHERE user.id` = sms.user_id                   
  AND (user.id = 42) 

添加您想要的其他字段以及分组依据。

一个问题是,如果两行具有相同的最大日期时间。如果这是可能的,并且您只想要一个结果,请使用LIMIT。

答案 1 :(得分:0)

通过使用特定的? mysql功能,我发现了一种难以实现的方法, GROUP_CONCAT 聚合函数中的 ORDER BY ,如下所示:

SELECT GROUP_CONCAT(images.id ORDER BY images.id), contributions.id FROM images JOIN contributions ON images.object_id = contributions.id WHERE (object_type = 1 OR object_type IS NULL) AND place = 1 GROUP BY contributions.id HAVING COUNT(*) > 1

此查询没有回答具体回答我的问题,因为我发现它时已经太晚了。要做到这一点,必须稍微改变一下。但这是一个很好的搜索方向。