很难构建聚合 SQL 查询

Having a hard time building an aggregate SQL query

我是 SQL 的新人,对基本知识有很好的了解,但我无法满足我的要求。

我的请求得到了以下 table(右端最后一列除外):

Team Variable Date Value Column_I_need_to_add
A aa 2022/05/01 100 0
A aa 2022/06/01 25 0
A aa 2022/07/01 580 0
A ad 2022/08/01 50 605
B aa 2021/05/01 75 0
B aa 2021/06/01 110 0
B aa 2021/07/01 514 0
B ad 2021/08/01 213 624

我无法回头的是,如何通过对同一团队的 aa 变量的值求和来为填充广告变量行的最后一列编写代码,但仅限于日期之前的两个月广告变量。

这是我目前的脚本,它为我提供了前四列:

SELECT
 
    team.Team, 

    Var.Variable, 

    TO_DATE(Var.Year||'-'||LPAD(Var.Month,2,'00')||'-'||'01','YYYY-MM-DD')AS Date , 

    Var.value 

FROM table1 as Var

join table2 as team

on Var.code=team.code
---This last join with table3 is only there to add other columns that are not relevant to this problem.
---join table3 as detail_var on Var.variable=detail_var.code_var

我对之前的答案不满意,通过进一步阅读可以理解,OUTER APPLY。所以不得不做一些进一步的研究,这就是我想出的(现在是 Postgres 13)。

它更干净,并且以更简洁的方式完成工作。我还添加了一个 FIDDLE LINK。如果您想查看以前的答案,请查看编辑版本。

SELECT
  team.Team
  ,var.Variable
  ,var.Date
  ,var.value
  ,CASE
    WHEN var.Variable='ad' THEN 
      (SELECT sum(value) FROM table1
       WHERE 
          (TO_DATE(Year||'-'||LPAD(Month::varchar(2),2,'0')||'-'||'01','YYYY-MM-DD')
              BETWEEN (var.Date - INTERVAL '2 month') AND var.Date)
          AND Variable = 'aa'
          AND code = var.code)
    ELSE null
  END as past2monthsValue
FROM (
  -- this sub query to change Year & Month to Date Type Value
  -- this Date Type Value (Date) will be used to compare dates
  -- (var.Date) in the above sub-query
  SELECT
    code,
    Variable,
    TO_DATE(Year||'-'||LPAD(Month::varchar(2),2,'0')||'-'||'01','YYYY-MM-DD') AS Date,
    value  
  FROM table1    
) var

JOIN table2 AS team ON var.code=team.code