【问题标题】:Table Self Join for Year over Year comparison表自联接的年度比较
【发布时间】:2018-07-24 04:54:04
【问题描述】:

我无法自行加入数据表以在单行中提供年度结果。

我的数据目前存储在表销售中,如下所示。我可以使用 Postgres 或 sqlite3。

我们(日期)|商店 |类别 |平面图 |计划 |商品 |售后

期望的结果是:

我需要能够在最后 4 列中显示 1/7/17 的 LY 值。

然后,我会将结果与为其他表复制相同查询的所有其他合作伙伴的结果合并。

可以假设所有当年的数据都将是我们>1/1/18 以匹配上一年结果的 364 天前的日期。

通过阅读其他帖子,我认为我可能需要制作 CTE 查询,但我只是不知道从哪里开始。

我希望这很清楚。

任何帮助解决这个问题将不胜感激。

【问题讨论】:

    标签: sql postgresql sqlite


    【解决方案1】:

    您似乎想加入相同的商店和类别,以及一年中的相同月份和日期。在 PostgreSQL 中会如下所示:

    select 
      'PartnerA' as channel,
      cy.we as date,
      cy.month,
      cy.year,
      cy.store,
      'PartnerA ' || cy.store as ch_store,
      cy.category,
      cy.planu,
      cy.planrev,
      cy.merchu,
      cy.merchrev,
      ly.planu as planu_ly,
      ly.planrev as planrev_ly,
      ly.merchu as merchu_ly,
      ly.merchrev as merchrev_ly
    from sales cy
    join sales ly on cy.store = ly.store and cy.category = ly.category
      and cy.we - interval '1 year' = ly.we
    ;   
    

    【讨论】:

    • 这是完美的。我真的很感激这个查询。这是一种比我想象的要容易得多的方法。我没有考虑区间函数,这确实是缺失的部分。
    • 很高兴为您提供帮助,并感谢您接受我的回答 :) 如果您还想要上一年没有匹配行的结果,请将 join 替换为 left outer join,也许是 @987654324 @ by coalesce(ly.planu, 0) (其他 ly 列也类似。永远记住闰年 ;-) 玩得开心!
    猜你喜欢
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多