2017-04-25 238 views
0

請幫助優化我的查詢。它看起來太笨重。 我想有一個更好的方法在sql中按小時查詢優化小組

與時間(日期時間),在那裏工作是人口和人口日期時間裏面存放auditdate列的表dauditnew

查詢按小時計數返回行數。

SELECT t.Hour, COUNT(t.Hour) as Count FROM dauditnew d, 
    (SELECT 0 as Hour FROM DUAL UNION 
    SELECT 1 FROM DUAL UNION 
    SELECT 2 FROM DUAL UNION 
    SELECT 3 FROM DUAL UNION 
    SELECT 4 FROM DUAL UNION 
    SELECT 5 FROM DUAL UNION 
    SELECT 6 FROM DUAL UNION 
    SELECT 7 FROM DUAL UNION 
    SELECT 8 FROM DUAL UNION 
    SELECT 9 FROM DUAL UNION 
    SELECT 10 FROM DUAL UNION 
    SELECT 11 FROM DUAL UNION 
    SELECT 12 FROM DUAL UNION 
    SELECT 13 FROM DUAL UNION 
    SELECT 14 FROM DUAL UNION 
    SELECT 15 FROM DUAL UNION 
    SELECT 16 FROM DUAL UNION 
    SELECT 17 FROM DUAL UNION 
    SELECT 18 FROM DUAL UNION 
    SELECT 19 FROM DUAL UNION 
    SELECT 20 FROM DUAL UNION 
    SELECT 21 FROM DUAL UNION 
    SELECT 22 FROM DUAL UNION 
    SELECT 23 FROM DUAL) t 
where 
    d.auditdate >= TO_DATE('25.04.2017 ' || t.Hour, 'dd.mm.yyyy HH24') and 
    d.auditdate <= TO_DATE('25.04.2017 ' || t.Hour || '_59_59', 'dd.mm.yyyy HH24_MI_SS') 
group by t.Hour 
+0

編輯你的問題,並提供樣本數據和預期結果。 –

+0

在這個問題中沒有PL/SQL - 它完全是SQL。 – MT0

回答

1

你想開始是這樣的:

select trunc(d.auditdate, 'HH24') as hh, count(*) 
from dauditnew d 
where d.auditdate >= '2017-04-25' and d.auditdate < '2017-04-26' 
group by trunc(d.auditdate, 'HH24') 
order by hh; 

如果錯過時間,那麼你可以使用一個left join以此爲子查詢。

+0

非常感謝 – user149691