假设有这样的表。
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)
答案 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哪一个速度更快,但又是值得深思的食物。