2017-04-25 5 views
0

クエリを最適化するのを助けてください。それはあまりにも大きく見えます。 私が移入され、人口の日時がauditdate列内に格納されるテーブルdauditnewがあり、SQL時間ごとにグループを最適化する

に時間(日時)で作業するより良い方法があると思います。

クエリは行を1時間ごとに返します。

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

関連する問題