Мар 11

Задача: Рекурсивно поднимаем статистику по количеству аккаунтов на указанную дату.
При этом у аккаунта есть только период с-по.
Основная задача – сгенерировать даты.

Сложный способ – рекурсия:

WITH RECURSIVE stat_( inputdate ) AS (
		SELECT COUNT(*) AS total, curdate
		FROM account
		WHERE expired > inputdate AND inputdate = NOW() - INTERVAL '1 MONTH'
	UNION ALL
		SELECT COUNT(*) AS total, ( inputdate + INTERVAL '1 DAY' ) AS curdate
		FROM stat_, account
		WHERE expired > curdate AND curdate = NOW() + INTERVAL '1 MONTH'

)
SELECT * FROM stat_

Очень простой способ – создаём виртуалную таблицу:

 SELECT 'now'::text::date + s.a AS day, account.id, count(account.id) AS count
   FROM generate_series((-120), 0) s(a)
Теги:

Leave a Reply

*
preload preload preload