Просьба считать по дате и суммировать до даты

Я хотел бы иметь запрос plsql, который подсчитывает количество строк по дате и сумму строк до даты.

Источником будет что-то вроде этого (сотни дат):

2019.05.01
2019.05.01
2019.05.02
2019.05.03
2019.05.03
2019.05.03
...

и результат:

date        nb  sum
-------------------
2019.05.01  2   2
2019.05.02  1   3
2019.05.03  3   6
    . . . 

Всего 2 ответа


Ключевым моментом здесь является использование функции агрегирования в качестве аналитической функции, которая выполняет функцию SUM(COUNT(dt)) OVER (ORDER BY dt) в приведенном ниже запросе.

WITH dates AS
(
  SELECT to_date(񟭓.05.01', 'YYYY.MM.DD') AS dt FROM dual UNION ALL
  SELECT to_date(񟭓.05.01', 'YYYY.MM.DD') AS dt FROM dual UNION ALL
  SELECT to_date(񟭓.05.02', 'YYYY.MM.DD') AS dt FROM dual UNION ALL
  SELECT to_date(񟭓.05.03', 'YYYY.MM.DD') AS dt FROM dual UNION ALL
  SELECT to_date(񟭓.05.03', 'YYYY.MM.DD') AS dt FROM dual UNION ALL
  SELECT to_date(񟭓.05.03', 'YYYY.MM.DD') AS dt FROM dual
)

SELECT dt, COUNT(dt) AS nb, SUM(COUNT(dt)) OVER (ORDER BY dt) AS sum
FROM dates
GROUP BY dt
;

введите описание изображения здесь


Первый тайм относительно прост. Что-то вроде

SELECT date, count(*) from table GROUP BY date ORDER BY date;

Но я не уверен насчет накопленной суммы. Если это ручной процесс, я бы, наверное, просто импортировал в Excel и делал это там, если честно.


Есть идеи?

10000