-- -- -- Forbidding gaps (and overlaps): -- -- SELECT room_id, range_agg(booked_during, false) FROM reservations WHERE room_id = 1 GROUP BY room_id; ERROR: range_agg: gap detected between lastRange and currentRange SELECT room_id, range_agg(booked_during, false) FROM reservations WHERE room_id = 6 GROUP BY room_id; ERROR: range_agg: overlap detected between lastRange and currentRange SELECT room_id, range_agg(booked_during, false) FROM reservations WHERE room_id NOT IN (1, 6) GROUP BY room_id; room_id | range_agg ---------+----------------------------- 4 | 5 | {"[07-01-2018,07-03-2018)"} 3 | 2 | {"[07-01-2018,07-03-2018)"} 7 | {"[07-01-2018,07-14-2018)"} (5 rows) -- -- -- Permitting gaps (but forbidding overlaps): -- -- SELECT room_id, range_agg(booked_during, true) FROM reservations WHERE room_id = 1 GROUP BY room_id; room_id | range_agg ---------+------------------------------------------------------- 1 | {"[07-01-2018,07-14-2018)","[07-20-2018,07-22-2018)"} (1 row) SELECT room_id, range_agg(booked_during, true) FROM reservations WHERE room_id = 6 GROUP BY room_id; ERROR: range_agg: overlap detected between lastRange and currentRange SELECT room_id, range_agg(booked_during, true) FROM reservations WHERE room_id NOT IN (1, 6) GROUP BY room_id; room_id | range_agg ---------+----------------------------- 4 | 5 | {"[07-01-2018,07-03-2018)"} 3 | 2 | {"[07-01-2018,07-03-2018)"} 7 | {"[07-01-2018,07-14-2018)"} (5 rows)