Следующий код генерирует даты и подсчитывает записи по дням.
SELECT ts, COUNT(DISTINCT(user_id)) FROM
( SELECT current_date + s.ts FROM generate_series(-20,0,1) AS s(ts) )
AS series(ts)
LEFT JOIN messages
ON messages.created_at::date = ts
GROUP BY ts
ORDER BY ts
Вывод выглядит так:
2011-07-07 0
2011-07-08 0
2011-07-09 0
2011-07-10 0
2011-07-11 0
2011-07-12 94
2011-07-13 56
2011-07-14 35
2011-07-15 56
2011-07-16 0
2011-07-17 13
Как бы вы изменили его на 2 дня, чтобы результаты перекрывались? Вместо того, чтобы считать отдельные user_id для каждого дня, он будет считать отдельные user_id для каждого 2-дневного периода.
Это отличается от суммирования отсчетов за 2 дня, так как user_id должен учитываться только один раз за каждый двухдневный период.
Работа в PostgreSQL 8.3.
Спасибо.