Допустим, у вас есть следующие PostgreSQL разреженным таблица с перечнем дат бронирование:Совокупные непрерывные диапазоны дат
CREATE TABLE reserved_dates (
reserved_days_id SERIAL NOT NULL,
reserved_date DATE NOT NULL
);
INSERT INTO reserved_dates (reserved_date) VALUES
('2014-10-11'),
('2014-10-12'),
('2014-10-13'),
-- gap
('2014-10-15'),
('2014-10-16'),
-- gap
('2014-10-18'),
-- gap
('2014-10-20'),
('2014-10-21');
Как вы агрегировать эти даты в непрерывные диапазоны дат (диапазоны без пробелов)? Такие, как:
start_date | end_date
------------+------------
2014-10-11 | 2014-10-13
2014-10-15 | 2014-10-16
2014-10-18 | 2014-10-18
2014-10-20 | 2014-10-21
Это то, что я придумал до сих пор, но я могу получить только start_date
таким образом:
WITH reserved_date_ranges AS (
SELECT reserved_date,
reserved_date
- LAG(reserved_date) OVER (ORDER BY reserved_date) AS difference
FROM reserved_dates
)
SELECT *
FROM reserved_date_ranges
WHERE difference > 1 OR difference IS NULL;
ключевого слова * календарь таблица *, в Вашем случае :: generate_series() LEFT JOIN YourTable, в основном. – wildplasser
Хорошо, я восполняю промежутки между этими датами. Как получить диапазоны дат от этого? – Linas