Sql 表自联接用于年度比较

Sql 表自联接用于年度比较,sql,postgresql,sqlite,Sql,Postgresql,Sqlite,我很难在一行中自动加入一个数据表来提供逐年的结果 我的数据当前存储在sales表中,如下所示。我可以使用Postgres或sqlite3 我们(日期)|商店|类别| planu | planrev | merchu | merchrev 预期结果是: 我需要能够在最后4列中显示1/7/17的LY值 然后,我将把结果与为其他表复制相同查询的所有其他伙伴的结果合并 可以假设,本年度的所有数据均为we>1/1/18,以便与上一年度结果的364天前的日期相匹配 通过阅读其他帖子,我认为我可能需要设计一

我很难在一行中自动加入一个数据表来提供逐年的结果

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

我们(日期)|商店|类别| planu | planrev | merchu | merchrev

预期结果是:

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

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

可以假设,本年度的所有数据均为we>1/1/18,以便与上一年度结果的364天前的日期相匹配

通过阅读其他帖子,我认为我可能需要设计一个CTE查询,我只是不知道从哪里开始

我希望这是清楚的


如果您有任何帮助,我们将不胜感激。

看来您希望加入相同的商店和类别,以及一年中的同一个月和同一天。在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
;   

这太完美了。我真的很感激你的提问。这是一个比我想象的简单得多的方法。我没有考虑间隔函数,它确实是缺失的一部分。很高兴帮助,谢谢你接受我的答案:)如果你还想要一个前一年没有匹配行的结果,请用<代码> >左外连接< /代码>替换<代码>连接/代码>,并且可能< <代码> L.PANUU <代码> >代码> CueSeCe(Ly.Primu,0)< /C>(和其他
ly
专栏类似。永远记住闰年;-)玩得开心!