2013-07-17 40 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 
相关问题