Выберите пустые даты для данных без данных из Oracle? - PullRequest
1 голос
/ 23 ноября 2010

У меня есть ряд показателей, сохраняемых по секундам.Я пытаюсь создать отчет, который будет выполнять следующее:

  • средние показатели по часам
  • максимум в час
  • минут в час
  • включите дату / время для часов без данных

Этот запрос почти дает правильные результаты.Однако, в течение нескольких дней есть данные, я НЕ хочу результатов UNION, которые дают нулевые значения.Я хочу, чтобы те бросили.

SELECT HOUR, METRIC, MINIMUM, MAXIMUM FROM (
select
  to_char(day,'DD-MON-YY "-" HH24":00"') AS HOUR,
  round(avg(duration), 2) AS METRIC,
  round(min(duration), 2) AS MINIMUM,
  round(max(duration), 2) AS MAXIMUM
from log_events
where day > to_date('08-NOV-10', 'DD-MON-YY')
  and day < to_date('08-NOV-10', 'DD-MON-YY') + 2
  and company = 'company A'
  and component = 'api layer'
  and event_label = 'execution request'
  group by to_char(day,'DD-MON-YY "-" HH24":00"')
  UNION
  select to_char(trunc(to_date('08-NOV-10', 'DD-MON-YY'))+(level-1)/24, 'DD-MON-YY "-" HH24":00"') HOUR,
     null as METRIC,
     null as MINIMUM,
     null as MAXIMUM
  from dual connect by level <= 48
)
order by HOUR;

Я даже не уверен, что это правильный способ запроса данных.Любой совет?

1 Ответ

1 голос
/ 23 ноября 2010

Создайте встроенную таблицу с часами и оставьте ее в таблице log_events:

select
  dummy_hours.hour,
  log_aggregate.METRIC,
  log_aggregate.MINIMUM,
  log_aggregate.MAXIMUM
from (
  select to_char(trunc(to_date('08-NOV-10', 'DD-MON-YY'))+(level-1)/24, 'DD-MON-YY "-" HH24":00"') HOUR
  from dual connect by level <= 48
) dummy_hours, (
  select to_char(day,'DD-MON-YY "-" HH24":00"') AS HOUR,
  round(avg(duration), 2) AS METRIC,
  round(min(duration), 2) AS MINIMUM,
  round(max(duration), 2) AS MAXIMUM
  from log_events
  where day between to_date('08-NOV-10', 'DD-MON-YY') and to_date('08-NOV-10', 'DD-MON-YY') + 2
  and day > to_date('08-NOV-10', 'DD-MON-YY')
  and day < to_date('08-NOV-10', 'DD-MON-YY') + 2
  and company = 'company A'
  and component = 'api layer'
  and event_label = 'execution request'
  group by to_char(day,'DD-MON-YY "-" HH24":00"')
) log_aggregate
where dummy_hours.hour = log_aggregate.hour(+)
order by dummy_hours.hour;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...