2017-02-15 3 views
-2

Я хочу создать запрос, который отображает даты и количество. Я хочу отображать все даты в диапазоне, включая даты с нулевым числом. Я ищу способ сделать это БЕЗ использования временных таблиц.Запрос, отображающий все даты в диапазоне

Вывод может выглядеть следующим образом:

Time    Count 
1/1/2017 01:00 AM 23 
1/1/2017 02:00 AM 0 
1/1/2017 03:00 AM 0 
1/1/2017 04:00 AM 12 
+0

Итак, в чем ваш вопрос? Или вы ищете кого-то, кто пишет запрос с нуля? Покажите нам какое-то усилие, например, что вы пробовали до сих пор и с чем именно вы боретесь. –

+0

Что вы подразумеваете под подсчетом? – Nitish

+0

Итак, вы хотите получить общее количество в час, даже если в этот час ничего нет? Возможно, вам нужно что-то вроде ['external external join'] (http://www.oracle-developer.net/display.php?id=312). В противном случае отправьте [простой пример] (http://stackoverflow.com/help/mcve). –

ответ

1

Я был в состоянии придумать решения, добавляет ноль подсчета строк. Ниже приведен пример набора результатов. Вы увидите, что есть несколько повторяющихся значений DayOfWeekByHour. Мне нужно будет выяснить, как их суммировать, но это в основном то, что я искал. См пример код ссылки

DayOfWeekByHour, граф

100, 0

101, 0

102, 0

100, 23

201, 100

example of code

SELECT 
    TO_NUMBER(MOD(V,7)+1 || LPAD(MOD(V,24),2,'0')) as DayOfWeekByHour, 0 
FROM (
     SELECT 1 V FROM DUAL 
    ) T 
    MODEL DIMENSION BY (ROWNUM R) 
     MEASURES (V) 
     RULES ITERATE (168) (
     V[ITERATION_NUMBER] = CV(R) + 1 
     ) 

UNION 

SELECT  
    TO_NUMBER(
     TO_CHAR(
      TO_DATE(
        EXTRACT(MONTH FROM ve.CREATED_TIMESTAMP) || '/' || 
        EXTRACT(DAY FROM ve.CREATED_TIMESTAMP) || '/' || 
        EXTRACT(YEAR FROM ve.CREATED_TIMESTAMP) ,'MM/DD/YYYY'),'D'),'99') * 100 + TO_NUMBER(TO_CHAR(TO_DATE(
        EXTRACT(MONTH FROM ve.CREATED_TIMESTAMP) || '/' || 
        EXTRACT(DAY FROM ve.CREATED_TIMESTAMP) || '/' || 
        EXTRACT(YEAR FROM ve.CREATED_TIMESTAMP) || ' ' || 
        EXTRACT(HOUR FROM ve.CREATED_TIMESTAMP) || ':' || 
        EXTRACT(MINUTE FROM ve.CREATED_TIMESTAMP) 
        ,'MM/DD/YYYY HH24:MI' 
        ) 
       ,'HH24' 
       ) 
      , '99') AS DayOfWeekByHour, 
    COUNT(*) 
FROM 
    VIEWER.VIEWING_EVENT ve 
WHERE 
    ve.CREATED_TIMESTAMP >= TO_TIMESTAMP('02-12-2016 00:00:00', 'dd-mm-yyyy hh24:mi:ss') AND 
    ve.CREATED_TIMESTAMP <= TO_TIMESTAMP('02-12-2017 00:00:00', 'dd-mm-yyyy hh24:mi:ss') 
GROUP BY 
    TO_NUMBER(
     TO_CHAR(
      TO_DATE(
        EXTRACT(MONTH FROM ve.CREATED_TIMESTAMP) || '/' || 
        EXTRACT(DAY FROM ve.CREATED_TIMESTAMP) || '/' || 
        EXTRACT(YEAR FROM ve.CREATED_TIMESTAMP) ,'MM/DD/YYYY'),'D'),'99') * 100 + TO_NUMBER(TO_CHAR(TO_DATE(
        EXTRACT(MONTH FROM ve.CREATED_TIMESTAMP) || '/' || 
        EXTRACT(DAY FROM ve.CREATED_TIMESTAMP) || '/' || 
        EXTRACT(YEAR FROM ve.CREATED_TIMESTAMP) || ' ' || 
        EXTRACT(HOUR FROM ve.CREATED_TIMESTAMP) || ':' || 
        EXTRACT(MINUTE FROM ve.CREATED_TIMESTAMP) 
        ,'MM/DD/YYYY HH24:MI' 
        ) 
       ,'HH24' 
       ) 
      , '99') 
ORDER BY 
    DayOfWeekByHour 
; 
+0

Если CREATED_TIMESTAMP хранится как дата/отметка времени, тогда 'trunc (created_timestamp, 'hh')' сделает для вас много работы. – Ben

Смежные вопросы