Вы ошибаетесь.Этот запрос:
select d.*
from (select start_date, to_char(end_date,'YYYY-mm-dd') as end_date
from date_table
order by start_date, end_date
) d
where start_date is null or end_date is null
не "показывает идеальный порядок".Может случиться так, что вы произведете заказ, который вы хотите, но это совпадение. Единственный способ получить результаты в определенном порядке - использовать ORDER BY
в крайнем SELECT
. Период.
Итак, если вы хотите получить результаты в определенном порядке, используйтеorder by
:
select d.*
from ((select d.start_date, to_char(end_date, 'YYYY-mm-dd') as end_date, 1 as ord
from date_table d
where d.start_date is null or d.end_date is null
order by start_date, end_date
) union all
(select cd.start_date, 'single missing day' as end_date, 2 as ord
from calendar_dates cd
where cd.db_date > '2017-12-12' and cd.db_date < '2018-05-13'
)
) d
order by ord, start_date;