Я создаю систему управления подписками и вам нужно создать список предстоящей даты выставления счетов в течение следующих 2 лет. Я был в состоянии использовать generate_series, чтобы получить соответствующие даты, как например:Postgres generate_series, исключая диапазоны дат
SELECT i::DATE
FROM generate_series('2015-08-01', '2017-08-01', '1 month'::INTERVAL) i
Последний шаг мне нужно принять это исключить определенные диапазоны дат из расчета. Эти исключенные диапазоны дат могут быть любым диапазоном времени. Кроме того, они не должны учитываться во временном диапазоне для generate_series.
Например, у нас есть исключение диапазона дат от '2015-08-27' до '2015-09-03'. Полученные generate_series следует исключить дату, неделю из расчета, и в основном толчок весь будущий месяц биллинг даты за одну неделю до будущего:
2015-08-01
2015-09-10
2015-10-10
2015-11-10
2015-12-10
Удаленный ответ, не затрагивает действительно трудную часть. Исключение диапазонов легко. Жесткая часть - это корректировка повторяемого шаблона, добавление большего количества времени в конец для компенсации пропущенных интервалов времени, а затем корректировка повторяющихся дат. Вам понадобится рекурсивный CTE или процедура для этого, я думаю, так как строки, добавленные путем компенсации исключения в конце, сами могут быть исключены, поэтому мы должны затем расширить число строк для проверки ... –
I также чувствуется, что ваш ежемесячный биллинг плохо сочетается с допуском исключений в течение нескольких дней или недель, потому что не каждый месяц имеет такое же количество дней.Вы можете подумать о выставлении счетов каждые 30 дней, а не каждый месяц. –
Ваш пример кажется неправильным. Дата увеличивается на 9 дней, но интервал составляет всего 7 дней. –