Совокупные итоги по дате в Postgres с использованием функции окна

Я хочу создать простой кумулятивный итог по дате в SQL, но столкнулся с, казалось бы, простой проблемой. Я разработал обходной путь, но представьте, что есть способ сделать то, что я хочу, без дополнительного шага. В основном то, что я ищу, это:

| Date | Count | | 2015-01-01 | 1 | | 2015-01-02 | 5 | | 2015-01-03 | 8 | | 2015-01-04 | 9 | | 2015-01-05 | 9 |

Можно предположить, что в таблице всего две строки — id и date — и хотелось бы видеть именно то, что выше; однако, когда я запускаю следующий код, я получаю повторяющиеся строки:

SELECT date, count(*) over (order by date) AS cumulative_count FROM my_table;

Возвращает:

| Date | Count | | 2015-01-01 | 1 | | 2015-01-02 | 5 | | 2015-01-02 | 5 | | 2015-01-02 | 5 | | 2015-01-02 | 5 | | 2015-01-02 | 5 | | 2015-01-03 | 8 | | 2015-01-03 | 8 | ...etc.

Мое обходное решение состояло в том, чтобы использовать SELECT DISTINCT date, count(*) over (order by date) AS cumulative_count FROM my_table;, но я думаю, что есть лучший способ, который мне просто не хватает.

Заранее спасибо!


person AvocadoRivalry    schedule 02.03.2015    source источник


Ответы (1)


если вы не хотите использовать отдельные, вы можете использовать GROUP BY DATE, COUNT

person DCR    schedule 02.03.2015
comment
group by будет вычислять не кумулятивный итог, а by date, если только вы не сделаете это в подзапросе, а затем не сделаете кумулятивный итог во внешнем запросе. Но это больше проблем, чем просто использовать distinct - person Clodoaldo Neto; 02.03.2015