CREATE EXTENSION range_agg; CREATE TABLE reservations ( room_id INTEGER NOT NULL, booked_during daterange ); INSERT INTO reservations (room_id, booked_during) VALUES -- 1: has a meets and a gap (1, daterange('2018-07-01', '2018-07-07')), (1, daterange('2018-07-07', '2018-07-14')), (1, daterange('2018-07-20', '2018-07-22')), -- 2: just a single row (2, daterange('2018-07-01', '2018-07-03')), -- 3: one null range (3, NULL), -- 4: two null ranges (4, NULL), (4, NULL), -- 5: a null range and a non-null range (5, NULL), (5, daterange('2018-07-01', '2018-07-03')), -- 6: has overlap (6, daterange('2018-07-01', '2018-07-07')), (6, daterange('2018-07-05', '2018-07-10')), -- 7: two ranges that meet: no gap or overlap (7, daterange('2018-07-01', '2018-07-07')), (7, daterange('2018-07-07', '2018-07-14')) ;