Oracle присоединяется к двойному диапазону дат

Я пытаюсь поместить данные в диапазон дат из двойного запроса. Результат должен выглядеть так:

SINGLEDAY       FLAG
01-NOV-2016     1
02-NOV-2016     -
03-NOV-2016     -
04-NOV-2016     1
05-NOV-2016     -

Для списка дней, которые я использую

select (to_date('11.2016','mm.yyyy')+level-1) as SINGLEDAY
from dual
connect by level <= TO_CHAR(LAST_DAY(to_date('11.2016','mm.yyyy')),'DD')

Но как мне соединить содержимое моей таблицы xyz с результатом? таблица xyz должна быть связана столбцом DATE_OF_SERVICE (дата). Любая помощь будет высоко ценится.


person fscherbaum    schedule 01.11.2016    source источник
comment
Как вы получаете 01-NOV из запроса, в котором вы выбираете to_date(09.2016)? В вашем регионе девятый месяц - ноябрь? Скорее всего, вы искажаете факты. Не круто!   -  person mathguy    schedule 01.11.2016
comment
Извините, mathguy, вы правы с 09.2016. Я изменил его на 11.2016. Так или иначе. Согласно 01-NOV: Дата по умолчанию указана из моего экземпляра оракула. Неважно, в каком формате я его визуализирую. Connect, похоже, справляется с этим таким образом.   -  person fscherbaum    schedule 01.11.2016


Ответы (1)


По сути, это left join в вашем запросе. Предполагая не более одной строки в вашей таблице для каждой даты:

with d as (
      select (to_date('09.2016','mm.yyyy')+level-1) as singleday
      from dual
      connect by level <= TO_CHAR(LAST_DAY(to_date('09.2016', 'mm.yyyy')), 'DD')
     )
select t.singleday,
       (case when t.date_of_service is not null then 1 end) as flag
from d left join
     t
     on d.singleday = t.date_of_service
order by d.singleday;

Если есть кратные, то возможно вы что group by:

with d as (
      select (to_date('09.2016','mm.yyyy')+level-1) as singleday
      from dual
      connect by level <= TO_CHAR(LAST_DAY(to_date('09.2016', 'mm.yyyy')), 'DD')
     )
select t.singleday, count(t.date_of_service) as cnt
from d left join
     t
     on d.singleday = t.date_of_service
group by d.singleday
order by d.singleday;
person Gordon Linoff    schedule 01.11.2016