select使用max时返回错误的id

时间:2012-01-05 02:26:31

标签: mysql sql max

假设有这样的表。

id town_id begin_date

12 2       2011-10-10
23 2       2011-11-10 
43 2       2012-01-01 

现在,如果我这样做

SELECT id, MAX(begin_date) AS mx
FROM regions

上述查询返回最大日期,但ID错误:

id mx
12 2012-01-01

这是预期的吗? 如何让它返回正确的ID(43,2012-01-01)

3 个答案:

答案 0 :(得分:4)

如果您要做的是获取与MAX()日期相关联的ID,那么您可以这样做:

SELECT id, begin_date from regions order by begin_date DESC LIMIT 1;

答案 1 :(得分:3)

您忘记了GROUP BY条款:

SELECT id, MAX(begin_date) AS mx
FROM regions
GROUP BY 1

答案 2 :(得分:0)

我还想为该答案添加另一种可能的解决方案,该解决方案可能更直观,因为接受的答案实际上是错误的,只有下面的注释可以部分解决。为什么?因为它仅在您希望按town_id分组结果时才有效。如果您需要一种解决方案来检索具有绝对最大日期的行,则只能使用Francisco Sotos答案或以下查询。

SELECT ID, begin_date from regions WHERE begin_date = (SELECT MAX(begin_date) FROM regions)

我发布的查询不使用limit,而是需要一个子查询。 IDK哪一个速度更快,但又是值得深思的食物。