2012-03-30 58 views
1

我有這個疑問MySQL組和聚合,如何獲得最終通緝的ID?

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從...

我無法弄清楚。 感謝

回答

0

我發現一個棘手的方式來實現,通過使用具體? MySQL的功能, ORDER BYGROUP_CONCAT聚合函數,像這樣:

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 

此查詢不回答具體回答我的問題,因爲它是太晚了,當我發現。要做到這一點,必須稍作改動。但這是一個很好的搜索方向。

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。

+0

謝謝,但你的答案跳過_group by_部分,我認爲這是我的問題的主要問題,加上我不能有一個子查詢,因爲我在1.000.000條目表上運行此。 我想這是不可能的,因爲它在這裏提到:[MySQL 5.0參考手冊:: 11.15.3 GROUP BY和HAVING與隱藏列](http://dev.mysql.com/doc/refman/5.0/en /group-by-hidden-columns.html)太糟糕了。 – jrmgx 2012-04-01 21:38:05