PostgreSQL generate_series с предложением WHERE
У меня проблема с генерацией серии дат и возвращением COUNT
строк, соответствующих каждой дате в серии.
SELECT generate_series(current_date - interval '30 days', current_date, '1 day':: interval) AS i, COUNT(*)
FROM download
WHERE product_uuid = 'someUUID'
AND created_at = i
GROUP BY created_at::date
ORDER BY created_at::date ASC
Я хочу, чтобы на выходе было количество строк, соответствующих текущей дате в серии.
05-05-2018, 35
05-06-2018, 23
05-07-2018, 0
05-08-2018, 10
...
Схема имеет следующие столбцы: id
, product_uuid
, created_at
, Любая помощь будет принята с благодарностью. Я могу добавить больше деталей, если это необходимо.
1 ответ
Решение
Поместите функцию генерации таблицы в from
и использовать join
:
SELECT g.dte, COUNT(d.product_uuid)
FROM generate_series(current_date - interval '30 days', current_date, '1 day':: interval
) gs(dte) left join
download d
on d.product_uuid = 'someUUID' AND
d.created_at::date = g.dte
GROUP BY g.dte
ORDER BY g.dte;