I have two tables
sales
| id | colour | payment_date | amount |
|---|---|---|---|
| 1 | red | 2023-01-04 | 2 |
| 1 | green | 2023-01-04 | 5 |
| 2 | green | 2023-01-04 | 1 |
| 2 | green | 2023-02-04 | 1 |
| 2 | green | 2023-03-04 | 1 |
| 2 | green | 2023-04-04 | 1 |
report_dates
| date |
|---|
| 2022-12-31 |
| 2023-01-31 |
| 2023-02-28 |
| 2023-03-31 |
| 2023-04-30 |
| 2023-05-31 |
| 2023-06-30 |
My aim is cumulative amount by report dates
I get cumulative amount by EOMONTH of payment_dates
SELECT
sales.id
,EOMONTH(sales.payment_date)
,sales.colour
,SUM(sales.amount) OVER (PARTITION BY sales.id, sales.colour ORDER BY EOMONTH(sales.payment_date))
FROM sales
ORDER BY pl.AGREEMENT_RK, pl.OPER_DATE
How to join with report dates and get report like this? EDITED: report dates before sales date doesn't needed
| id | colour | date | cum_amount |
|---|---|---|---|
| 1 | red | 2023-01-31 | 2 |
| 1 | red | 2023-02-28 | 2 |
| 1 | red | 2023-03-31 | 2 |
| 1 | red | 2023-04-30 | 2 |
| 1 | red | 2023-05-31 | 2 |
| 1 | red | 2023-06-30 | 2 |
| 1 | green | 2023-01-31 | 5 |
| 1 | green | 2023-02-28 | 5 |
| 1 | green | 2023-03-31 | 5 |
| 1 | green | 2023-04-30 | 5 |
| 1 | green | 2023-05-31 | 5 |
| 1 | green | 2023-06-30 | 5 |
| 2 | green | 2023-01-31 | 1 |
| 2 | green | 2023-02-28 | 2 |
| 2 | green | 2023-03-31 | 3 |
| 2 | green | 2023-04-30 | 4 |
| 2 | green | 2023-05-31 | 4 |
| 2 | green | 2023-06-30 | 4 |
Try by calculating the SUM in a separate CTE and eventually UNION with the missing ones:
https://dbfiddle.uk/ILZn5lFc