在Mysql语句中的Group By内部命令

时间:2012-05-31 00:55:46

标签: mysql

我有一张具有以下结构的表......

--------------------------------
id | state_abbr | poll_date
1       GA         2010-01-01
2       GA         2011-01-01
3       NC         2011-02-01
-------------------------------

我需要一个查询,它会为每个州带回最新的poll_date。我正在使用group by但我无法找到如何在其中订购以恢复最新的poll_date。它只会为每个州带回第一个poll_date。因此GA将是2010-01-01,NC将是2011-02-01,然后订单将依次对这些值进行排序。我该怎么办才能解决这个问题?

2 个答案:

答案 0 :(得分:1)

怎么样

SELECT id, state_abr, poll_date FROM <yourTableName> t INNER JOIN (SELECT MAX(poll_date) max_date, id, state_abbr FROM <yourTableName> GROUP BY state_abr) p ON t.state_abbr = p.state_abbr && t.poll_date = p.max_date;

由于您不能对多于一件事进行分组,这样您就可以执行该组,收集聚合最大日期,然后使用该数据选择最终的相应行。

编辑:删除DISTINCT ROW大脑失误,对不起,这是我得到这么晚才得到的。 :)

答案 1 :(得分:0)

Mysql功夫救援:

select * from
(select * from polls order by state_abr, poll_date desc) x
group by state_abr

尽管看起来很精神,即使它在其他数据库中甚至不是有效的SQL,但这都有效。

mysql具有特殊功能,允许group by 而不按列聚合非组,在这种情况下,它返回指定组遇到的第一个

如果您从对行排序的内部查询中进行选择,那么您想要从每个组中获取的行是第一个,那么您只需在相关列上添加一个组。