Представления SQL / Django условная кумулятивная сумма значений

Я совсем новичок в SQL и Django, я пытаюсь создать запрос для суммирования значения столбца A (целое число), если значение в столбце B (строка) отличается. Это суммирование должно производиться на основе даты (столбец C).

Вот данные:

Column A Column B Column C 
2.0      Rock     2020-08-08
3.0      Paper    2020-09-08
25.0     Rock     2021-09-09
12.0     Rock     2021-10-10
5.0      Paper    2021-11-11

На основе этих данных я хотел бы иметь третий столбец D, который будет представлять кумулятивное значение, как показано ниже:

Column A    Column B Column C    Column D
2.0         Rock     2020-08-08  2.0
3.0         Paper    2020-09-08  5.0
25.0        Rock     2021-09-09  28.0
12.0        Rock     2021-10-10  15.0
5.0         Paper    2021-11-11  17.0

Если вам нужен запрос, вы можете сделать его с помощью self join и FIRST_VALUE() оконной функции:

SELECT DISTINCT t1.*, 
       t1.ColumnA + COALESCE(FIRST_VALUE(t2.ColumnA) OVER (PARTITION BY t1.ColumnC ORDER BY t2.ColumnC DESC), 0) ColumnD
FROM tablename t1 LEFT JOIN tablename t2
ON t2.ColumnC < t1.ColumnC AND t2.ColumnB <> t1.ColumnB
ORDER BY t1.ColumnC;

Смотрите demo.

Вернуться на верх