Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回每个元素的最新结果的Mysql查询_Mysql_Sql - Fatal编程技术网

返回每个元素的最新结果的Mysql查询

返回每个元素的最新结果的Mysql查询,mysql,sql,Mysql,Sql,我很难将我的思绪集中在看似简单的问题上 假设我们有一个表,它记录了每个商店中按日期显示的小部件/气球的数量。您如何获得商店列表及其最新的小部件/气球计数 i、 e 希望结果表列出所有商店及其最新的小部件/阳台清单 商店,最新的小部件,最新的气球 +-------+-----------+---------+ | store | widgets | baloons | +-------+-----------+---------+ | 2 | 16 | NULL |

我很难将我的思绪集中在看似简单的问题上

假设我们有一个表,它记录了每个商店中按日期显示的小部件/气球的数量。您如何获得商店列表及其最新的小部件/气球计数

i、 e

希望结果表列出所有商店及其最新的小部件/阳台清单

商店,最新的小部件,最新的气球

+-------+-----------+---------+
| 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