返回每个元素的最新结果的Mysql查询
我很难将我的思绪集中在看似简单的问题上 假设我们有一个表,它记录了每个商店中按日期显示的小部件/气球的数量。您如何获得商店列表及其最新的小部件/气球计数 i、 e 希望结果表列出所有商店及其最新的小部件/阳台清单 商店,最新的小部件,最新的气球返回每个元素的最新结果的Mysql查询,mysql,sql,Mysql,Sql,我很难将我的思绪集中在看似简单的问题上 假设我们有一个表,它记录了每个商店中按日期显示的小部件/气球的数量。您如何获得商店列表及其最新的小部件/气球计数 i、 e 希望结果表列出所有商店及其最新的小部件/阳台清单 商店,最新的小部件,最新的气球 +-------+-----------+---------+ | store | widgets | baloons | +-------+-----------+---------+ | 2 | 16 | NULL |
+-------+-----------+---------+
| store | widgets | baloons |
+-------+-----------+---------+
| 2 | 16 | NULL |
| 3 | 12 | 78 |
+-------+-----------+---------+
或者获取引出序号的最新非空值。您可以使用相关子查询来获取每个商店的最新记录
select i.*
from inventory i
where i.invDate = (
select max(invDate)
from inventory
where i.store = store
)
order by i.store
这适用于所有版本的MySQL
select i.*
from inventory i
join
(
select store, max(invDate) as maxDate
from inventory
group by store
) tmp on tmp.store = i.store
and tmp.maxDate = i.invDate
使用MySQL 8+可以执行以下窗口功能:
with cte as
(
select store, widgets, balloons,
ROW_NUMBER() OVER(PARTITION BY store ORDER BY invDate desc) AS rn
from inventory
)
select * from cte where rn = 1
将ORDER BY invDate DESC和GROUP BY store添加到查询的末尾。@jhilgeman:不是这样的easy@meccooll:您使用的是哪个版本的MySQL?运行的版本很少,如果在较新版本上有一个优雅的解决方案,则可以进行更新,但其中一个较旧的实例是mysqld版本5.7.31-0ubuntu0.16.04.1,适用于x86上的Linux_64@juergend这样地?我真的不明白你的说法,如果两个或更多商店的日期是相同的,因为一个相关的查询,它应该会起作用!很高兴知道我没有遗漏任何简单的函数。Thnx
with cte as
(
select store, widgets, balloons,
ROW_NUMBER() OVER(PARTITION BY store ORDER BY invDate desc) AS rn
from inventory
)
select * from cte where rn = 1