SQL - 加入 2 个表并计算 运行 总和(月初至今)

SQL - Join 2 tables and calculate running sum (month to date)

有 2 个 table:


需要在同一个 ID 上加入这 2 个 table 的日期 - 以显示从同月开始到(包括)第一个 [=29] 日期的总金额(总和) =].

结果应该是:

我制作了一部分(总计 运行)但还没有完成:

  select 
        date_a, a.id,
        sum(b.AMOUNT) over (partition by b.ID, to_varchar(b.ID::date, 'yyyy-mm') 
        order by b.ID) 
        as AMOUNT_MONTH_TO_DATE  
    FROM 
        a
    inner join
        b
    on 
        a.id = b.id

除非预期结果第二行的total_amount是一个错误,否则应该这样做:

SELECT date_a,
       a.id,
       SUM(IF(date_b <= date_a AND MONTH(date_b)=MONTH(date_a),amount,0)) AS total_amount 
    FROM a 
    INNER JOIN b 
       ON a.id=b.id 
GROUP BY date_a, a.id
ORDER BY date_a DESC;

根据您的解释,abc2 也应该 return 0 但您在预期输出中显示了 10。原因是 date_b 大于 date_a,对于 "Start Date of month" 和 "Date_a" 之间的逻辑 date_b,不应为 abc2 选择任何内容。如果我是对的,下面的查询将起作用-

SELECT 
A.id,
A.date_a,
COALESCE
(
    (
        SELECT 
        SUM(amount) 
        FROM TABLE_2 B 
        WHERE B.id = A.id 
        AND B.date_b BETWEEN DATEADD(DD,-(DAY(date_a)-1),date_a) AND  A.date_A
    )
    ,0
)
FROM TABLE_1 A

使用 LEFT JOIN-

可以实现相同的输出
SELECT 
A.id,
A.date_a,
COALESCE(SUM(B.amount),0) total_amount
FROM table_1 A
LEFT JOIN table_2 B ON B.id = A.id 
    AND B.date_b BETWEEN DATEADD(DD,-(DAY(A.date_a)-1),date_a) AND  A.date_A
GROUP BY A.id,A.date_a