Расчет промежуточных итогов с сохранением константы для каждого месяца - PullRequest
0 голосов
/ 08 января 2019

Мне нужно рассчитать промежуточную сумму, хотелось бы, чтобы число было постоянным для каждого месяца, только чтобы оно увеличивалось на определенную сумму для каждого последующего месяца. Однако я не могу сгруппировать или разделить даты, чтобы сделать это ... и я знаю только код, чтобы написать непрерывный промежуточный итог.

Я пробовал это:

SELECT 
    monthdates,
    sum(10) OVER (
        PARTITION BY monthdates ORDER BY monthdates ASC rows between unbounded preceding and current row)
FROM mytable;

.. что не так, потому что я хочу это:

+------------+-----+
| monthdates | sum |
+------------+-----+
| 2018-01-01 |  10 |
| 2018-01-01 |  10 |
| 2018-02-01 |  20 |
| 2018-02-01 |  20 |
| 2018-02-01 |  20 |
| 2018-02-01 |  20 |
| 2018-02-01 |  20 |
| 2018-03-01 |  30 |
| 2018-03-01 |  30 |
+------------+-----+

Как мне подойти к этой проблеме? Заранее спасибо!

1 Ответ

0 голосов
/ 08 января 2019

Сначала получите текущую сумму по monthdates, а затем присоедините их к вашему столу на monthdates.

SELECT t2.monthdates,
       x2.sum
       FROM mytable t2
            INNER JOIN (SELECT x1.monthdates,
                               sum(10) OVER (ORDER BY x1.monthdates) sum
                               FROM (SELECT DISTINCT
                                            t1.monthdates
                                            FROM mytable t1) x1) x2
                       ON x2.monthdates = t2.monthdates
       ORDER BY t2.monthdates;

Вы можете решить эту проблему еще проще, используя dense_rank(), умноженное на 10, но без sum().

SELECT t1.monthdates,
       dense_rank() OVER (ORDER BY t1.monthdates) * 10 sum
       FROM mytable t1
       ORDER BY t1.monthdates;

дб <> скрипка

...