2014-03-06 52 views
1

我有一個表,我想從每個組中收集項目的最大值的id,但我有一個問題。獲取組中的最大值的編號

SELECT group_id, MAX(time) 
FROM mytable 
GROUP BY group_id 

這樣,我得到了正確的行,但我需要的ID:

SELECT id,group_id,MAX(time) 
FROM mytable 
GROUP BY id,group_id 

這樣,我得到了所有的行。我怎麼能從每個組獲得最大值的時間ID?

樣本數據

id = 1, group_id = 1, time = 2014.01.03 
id = 2, group_id = 1, time = 2014.01.04 
id = 3, group_id = 2, time = 2014.01.04 
id = 4, group_id = 2, time = 2014.01.02 
id = 5, group_id = 3, time = 2014.01.01 

,並從我應該得到ID:2,3,5 謝謝!

+1

刪除BY子句 – kwelsan

+0

「ID」從組MySQL已經laxer組通過策略而不是其他DBMS,可以將列從GROUP BY或聚合函數中刪除。 – Mihai

+0

用一些樣本數據解釋 –

回答

4

使用你的工作查詢作爲子查詢,例如:

SELECT `id` 
FROM `mytable` 
WHERE (`group_id`, `time`) IN (
    SELECT `group_id`, MAX(`time`) as `time` 
    FROM `mytable` 
    GROUP BY `group_id` 
) 
+0

按預期工作,謝謝! –

3

看一看下面的演示

DROP TABLE IF EXISTS mytable; 

CREATE TABLE mytable(id INT , group_id INT , time_st DATE); 

INSERT INTO mytable VALUES(1, 1, '2014-01-03'),(2, 1, '2014-01-04'),(3, 2, '2014-01-04'),(4, 2, '2014-01-02'),(5, 3, '2014-01-01'); 

/** Check all data **/ 
SELECT * FROM mytable; 
+------+----------+------------+ 
| id | group_id | time_st | 
+------+----------+------------+ 
| 1 |  1 | 2014-01-03 | 
| 2 |  1 | 2014-01-04 | 
| 3 |  2 | 2014-01-04 | 
| 4 |  2 | 2014-01-02 | 
| 5 |  3 | 2014-01-01 | 
+------+----------+------------+ 


/** Query for Actual output**/ 

SELECT 
    id 
FROM 
    mytable 
JOIN 
    ( 
     SELECT group_id, MAX(time_st) as max_time 
     FROM mytable GROUP BY group_id 
    ) max_time_table 
ON mytable.group_id = max_time_table.group_id AND mytable.time_st = max_time_table.max_time;  
+------+ 
| id | 
+------+ 
| 2 | 
| 3 | 
| 5 | 
+------+ 
+0

感謝您的好演示! –