2

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

--------------------------------
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 并且 order by 然后将对这些值进行排序。我能做些什么来解决这个问题?

4

2 回答 2

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;

由于您不能对超过 1 个事物进行分组,因此您可以通过这种方式执行分组,收集聚合最大日期,然后使用该数据选择最终对应的行。

编辑:删除了 DISTINCT ROW 大脑失误,抱歉,这是我迟到的结果。:)

于 2012-05-31T01:24:03.370 回答
0

mysql功夫来拯救:

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

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

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

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

于 2012-05-31T01:34:07.250 回答