oracleは、一定期間の連続時間間隔のレコードセットをクエリーします.

1585 ワード

実際の作業では、時間ごとにデータを統計する場合がありますが、データベース内のデータは必ずしも連続しているとは限りません.時間ごとにグループ化すると、タイム・アーカイブが形成され、表示された結果が連続した時間記録を形成できるように、
通常の方法は、データベース内のクエリー結果に接続する前に、一定時間間隔のレコードセットを形成することです.
次のSQL文は、一定期間の連続時間間隔でクエリされます.
SELECT to_date('2013-10-01', 'yyyy-mm-dd') +
       numtodsinterval(rownum - 1, 'hour')
  FROM DUAL
CONNECT BY ROWNUM <= ((to_date('2013-10-02', 'yyyy-mm-dd') -
           to_date('2013-10-01', 'yyyy-mm-dd') + 1) * 24)

結果は次のとおりです.
1	2013/10/1
2	2013/10/1 1:00:00
3	2013/10/1 2:00:00
4	2013/10/1 3:00:00
5	2013/10/1 4:00:00
6	2013/10/1 5:00:00
7	2013/10/1 6:00:00
8	2013/10/1 7:00:00
9	2013/10/1 8:00:00
10	2013/10/1 9:00:00
11	2013/10/1 10:00:00
12	2013/10/1 11:00:00
13	2013/10/1 12:00:00
14	2013/10/1 13:00:00
15	2013/10/1 14:00:00
16	2013/10/1 15:00:00
17	2013/10/1 16:00:00
18	2013/10/1 17:00:00
19	2013/10/1 18:00:00
20	2013/10/1 19:00:00
21	2013/10/1 20:00:00
22	2013/10/1 21:00:00
23	2013/10/1 22:00:00
24	2013/10/1 23:00:00
25	2013/10/2
26	2013/10/2 1:00:00
27	2013/10/2 2:00:00
28	2013/10/2 3:00:00
29	2013/10/2 4:00:00
30	2013/10/2 5:00:00
31	2013/10/2 6:00:00
32	2013/10/2 7:00:00
33	2013/10/2 8:00:00
34	2013/10/2 9:00:00
35	2013/10/2 10:00:00
36	2013/10/2 11:00:00
37	2013/10/2 12:00:00
38	2013/10/2 13:00:00
39	2013/10/2 14:00:00
40	2013/10/2 15:00:00
41	2013/10/2 16:00:00
42	2013/10/2 17:00:00
43	2013/10/2 18:00:00
44	2013/10/2 19:00:00
45	2013/10/2 20:00:00
46	2013/10/2 21:00:00
47	2013/10/2 22:00:00
48	2013/10/2 23:00:00