我有下表:
firm | Sales | year
A | 100 | 2018
A | 200 | 2017
A | 300 | 2016
B | 400 | 2017
B | 500 | 2016
B | 600 | 2015
C | 700 | 2016
C | 800 | 2015
C | 900 | 2014
我正在尝试编写mysql查询,它将为每个组(公司)返回上一次观察(sales)或上一次观察的n个延迟。
我发现mysql query可以返回每个组的最后一次观察结果:
select *
from (select * from mytable order by `Group`, firm, datum desc) x
group by `Group`
但我不知道如何修改代码以返回一个来自最新观察的延迟,即:
firm | Sales | year
A | 200 | 2017
B | 500 | 2016
C | 800 | 2015
2条答案
按热度按时间wxclj1h51#
通过mysql 8中引入的窗口函数使用lag会更容易
u3r8eeie2#
我认为最常用的方法是使用变量枚举值:
您的版本有一个致命的缺陷:它正在使用
group by
与select *
. 在select中有未聚合的列不是group by
钥匙。这是一个坏sql,几乎在任何数据库中都会失败,并且使用mysql最新版本中的默认设置。如果意图是“n”是最近一年之前的年数(被1抵消),那么join可以工作: