gpt4 book ai didi

SQL将表连接到自身以获取上一年的数据

转载 作者:行者123 更新时间:2023-12-01 09:44:02 24 4
gpt4 key购买 nike

SQL。我怎样才能将表连接到自身以获得所需的结果,如下表所示。逻辑是我想要相同产品和上一年相应月份的单位。

在键 a.[year]=b.[year]+1 上将源表上的简单左连接连接到自身(当然还有每个月和每个产品)会导致丢失我们在前一年有值而现在没有的数据。

enter image description here

最佳答案

完全连接就足够了

  select distinct
coalesce(a.year, b.year+1) as year
, coalesce(a.month, b.month) as month
, coalesce(a.product, b.product) as product
, a.units as units
, b.units as units_prev
from yourtable a
full join yourtable b on a.[year] = b.[year]+1 and a.[month] = b.[month] and a.product = b.product

您的预期结果与 2018 年第 2 个月的描述略有不同,产品 2 不存在,先前值为 2933。

DB fiddle :https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=d01dc5bd626854b083be0864f2d5b0e4

结果:

year    month   product units   units_prev
2017 1 1 1721
2017 2 1 4915
2017 4 2 2933
2017 5 1 5230
2018 1 1 1721
2018 1 2 7672
2018 2 1 5216 4915
2018 3 1 8911
2018 4 2 2933
2018 5 1 5230
2019 1 2 7672
2019 2 1 5216
2019 3 1 8911

如果您需要过滤掉这样的 future ,那么您可以添加一个额外的 where 谓词,例如:

where coalesce(a.year, b.year+1) <= year(getdate())

关于SQL将表连接到自身以获取上一年的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53372649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com