2013-07-17 39 views
1

表例如:
來自同一列中選擇單元格與MAX功能

event_id| group_id | updated_at 
1 | 1 |2012-01-02 
2 | 1 |2012-01-01 
3 | 2 |2012-01-01 
4 | 2 |2012-01-02 
5 | 3 |2012-01-01 

我需要選擇具有最大日期的所有事項標識,通過GROUP_ID分組。所以,正確的結果將是:

event_id| group_id | updated_at 
1 | 1 |2012-01-02 
4 | 2 |2012-01-02 
5 | 3 |2012-01-01 

我可以選擇事項標識,從同一行是MAX(的updated_at)已經選定?

SELECT event_id, group_id, MAX(updated_at) 
FROM my_table 
GROUP BY group_id; 

回答

1

MySQL可能允許語法,你建議的類型 - 指定也沒有集團的部分非聚合列 - 但它是非標準和恕我直言,一個壞習慣進入。

相反,你會怎麼做:

SELECT t1.event_id, t1.group_id, t1.updated_at 
FROM my_table t1 
INNER JOIN 
(
    SELECT group_id, MAX(updated_at) AS max_updated_at 
    FROM my_table 
    GROUP BY group_id 
) t2 ON t1.group_id = t2.group_id AND t1.updated_at = t2.max_updated_at 

注意但如果updated_at不是唯一一個給定group_id,該查詢將返回所有說行。

+0

關於你的注意,這是正確的,我不能使用這樣的查詢 –

+0

那麼你想要做什麼? –

+0

我有一個想法,在子查詢中使用ORDER BY,而不是使用GROUP BY,我想我會得到我想要的但這個查詢將是非常糟糕的做法 –

1

由LC解決方案類似,下面將讓你得到記錄最新的一天,再一個,每天最高事項標識這些記錄: -

SELECT t1.event_id, t1.group_id, t1.updated_at 
FROM my_table t1 
INNER JOIN 
(
    SELECT group_id, MAX(updated_at) AS max_updated_at 
    FROM my_table 
    GROUP BY group_id 
) t2 
ON t1.group_id = t2.group_id AND t1.updated_at = t2.max_updated_at 
INNER JOIN 
(
    SELECT group_id, updated_at, MAX(event_id) AS max_event_id 
    FROM my_table 
    GROUP BY group_id, updated_at 
) t3 
ON t1.group_id = t3.group_id 
AND t1.event_id = t2.max_event_id 
AND t3.max_updated_at = t3.updated_at 
相關問題