我有一个像这样的表 numberoffirms
:
--------------------------------------------
| id | region | month | year | value |
--------------------------------------------
| 1| 1| 1| 1| 1024001|
| 2| 1| 7| 25| 33542|
| 3| 1| 3| 26| 10000000|
| 4| 1| 5| 26| 1995|
| 5| 2| 4| 16| 123456|
我的问题是我需要根据最高月份和年份获取每个区域的最高值。例如,从上表中,我应该得到值 1995,因为在区域 1 中,最大年份是 26,在那一年,最大月份是 5。
现在,当我运行我创建的 SQL 查询时,它没有获得正确的值。
SELECT region, MAX(month) month, year, value FROM `numberoffirms` WHERE year IN (SELECT MAX(year) year FROM `numberoffirms` GROUP BY region) GROUP BY region
它得到的值是这个
| region | month | year | value |
------------------------------------
| 1| 5| 26| 10000000 |
这显然是错误的,因为我应该得到的值是 1995,尽管它得到了正确的地区、月份和年份。
我在这里的 SQL 查询代码有什么问题?
最佳答案
您可以在子查询中简单地使用 order by 和 limit 1:
Select * from numberoffirms t1 where id=
(SELECT id FROM numberoffirms t2
where t1.region=t2.region
order by year desc,month desc,value desc
limit 1);
我在我的 PC 中创建了你的表和值并测试了查询,它工作正常。
关于MySQL 查询没有得到正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37509597/