Вы можете использовать оконные функции для достижения желаемого результата, COUNT
ввод id
значений на текущую дату регистрации или до нее. Обратите внимание, что мы используем DISTINCT
, чтобы избежать дублирования записей, когда несколько пользователей регистрируются в один и тот же день:
SELECT DISTINCT Registration_Date,
COUNT(id) OVER (ORDER BY Registration_Date) AS Registrations
FROM users
Вывод:
Registration_Date Registrations
2020-05-01 2
2020-05-02 3
2020-05-03 4
2020-05-04 5
Демо на dbfiddle
Для случая, когда есть регистрации до первой интересующей отчетной даты, вам необходимо подсчитать регистрации до первой даты включительно, а затем для каждой даты отчетного периода в производной таблице, а затем суммируйте их во внешнем запросе:
SELECT Reporting_Date,
SUM(Registrations) OVER (ORDER BY Reporting_Date) AS Registrations
FROM (
SELECT '2020-05-01' AS Reporting_Date, COUNT(id) AS Registrations
FROM users
WHERE Registration_Date <= '2020-05-01'
UNION
SELECT Registration_Date, COUNT(id)
FROM users
WHERE Registration_Date BETWEEN '2020-05-02' AND '2020-05-04'
GROUP BY Registration_Date
) r
Создание результата таким способом в целом будет более эффективным, чем перенос исходного запроса в виде производной таблицы, поскольку для этого потребуется меньше агрегатов.
Демо на dbfiddle