PostgreSQL: медленно работает with recursive
Всем привет. Таблица имеет такой вид
Подписка | Начало подписки | Конец подписки |
---|---|---|
Один | 01-01-2021 | 15-03-2021 |
Два | 07-02-2021 | 07-05-2021 |
Три | 30-03-2021 | 15-09-2021 |
мне нужен запрос, который выводит количество подписок, которые "зацепляют" месяц хоть на один день. Условно:
Месяц | Количество подписок |
---|---|
Январь 2021 | 1 |
Февраль 2021 | 2 |
Март 2021 | 3 |
Апрель 2021 | 2 |
Май 2021 | 2 |
Июнь 2021 | 1 |
Ибль 2021 | 1 |
Август 2021 | 1 |
Сентябрь 2021 | 1 |
я этого добился с помощью WITH RECURSIVE, по сути каждую итерацию брал границы нового месяца и выбирал подписки WHERE 'Начало подписки' < 'Конца месяца' AND 'Конец подписки' > 'Начало месяца'. Все это как я сказал работает, но работает медленно, вплоть до того, что мне этот запрос на 20к подписок и периода на 4 года (брал по месяцу) пришлось разделить на 3 части по полтора года а потом склеить результаты UNION'ом. Может кто знает другой подход, пошустрее?