我有一张具有以下结构的表......
--------------------------------
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,然后订单将依次对这些值进行排序。我该怎么办才能解决这个问题?
答案 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)
select * from
(select * from polls order by state_abr, poll_date desc) x
group by state_abr
尽管看起来很精神,即使它在其他数据库中甚至不是有效的SQL,但这都有效。
mysql具有特殊功能,允许group by
而不按列聚合非组,在这种情况下,它返回指定组遇到的第一个行
如果您从对行排序的内部查询中进行选择,那么您想要从每个组中获取的行是第一个,那么您只需在相关列上添加一个组。