@ChygyN

Как в Postgresql получить данные с разбивкой по месяцам?

Всем привет
Есть таблица с данными о подписках, у записей есть поле "подписка от" и "подписка до", написал запрос, который выдает подписки на текущий месяц, причем по таким условиям:
  • подписка от <= конец текущего месяца
  • подписка до >= начало текущего месяца

то есть когда период подписки "цепляет" текущий месяц (см. приложенную схему)6462096a514e8315774751.png

Теперь мне нужна выгрузка за предыдущий год так же разбивка по месяцам. Я та понял тут надо использовать WITH RECURSIVE, но пока не удается написать правильный запрос. Пытался написать что-то типа такого
WITH RECURSIVE r AS (
    -- стартовая часть рекурсии (т.н. "anchor")
    SELECT 
        1 AS i,
	current_date AS days
    
    UNION 
    
    -- рекурсивная часть 
    SELECT 
        i+1 AS i, 
        current_date - interval '1 month' * i as days
    FROM r
    WHERE i < 12
)
SELECT * FROM r;

(не смотрите, что нет условий по сравниванию с началом и концом месяца, я просто пробовал шагать 'по месяцам', когда научусь в принципе несложно будет в сравнение в условие запихнуть), но выходят ошибки, типа

ERROR: recursive query "r" column 2 has type date in non-recursive term but type timestamp without time zone overall
LINE 5: current_date AS days
^
HINT: Cast the output of the non-recursive term to the correct type.

Не понимаю.
И сразу вдогонку вопросы:
  1. в якорной части мы же пишем только скажем так начальные счетчики, а в рекурсивной пишем запрос, чтоб условия на основе этих счетчиков соблюдалось, или нужно там прописать первую итерацию, и последующие будут объединяться с тем, что в якорной получилось?
  2. Можно сделать так, чтобы значения счетчиков не отображалось (не присутствовало в SELECT)?
  • Вопрос задан
  • 314 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы