Oracle setup :
CREATE TABLE table_name ( START_DATE, END_DATE, SYSTEM ) AS SELECT DATE '2016-08-10', DATE '2016-08-11', 'DEMO001' FROM DUAL UNION ALL SELECT DATE '2016-09-05', DATE '2016-09-08', 'DEMO001' FROM DUAL UNION ALL SELECT DATE '2016-08-08', DATE '2016-08-11', 'DEMO013' FROM DUAL UNION ALL SELECT DATE '2016-08-16', DATE '2016-08-18', 'DEMO017' FROM DUAL;
Query
With bind variables :start_date and :end_date as inputs:
SELECT system, MIN( CASE WHEN :end_date < start_date OR :start_date > end_date THEN 1 ELSE 0 END ) AS can_book FROM table_name GROUP BY system;
Exit
For inputs :start_date = DATE '2016-08-08' and :end_date = DATE '2016-08-15' :
SYSTEM CAN_BOOK ------- ---------- DEMO001 0 DEMO013 0 DEMO017 1
For inputs :start_date = DATE '2016-09-06' and :end_date = DATE '2016-09-07' :
SYSTEM CAN_BOOK ------- ---------- DEMO001 0 DEMO013 1 DEMO017 1
For inputs :start_date = DATE '2016-08-08' and :end_date = DATE '2016-08-09' :
SYSTEM CAN_BOOK ------- ---------- DEMO001 1 DEMO013 0 DEMO017 1
MT0
source share