創建你的樣表:
SQL> create table mytable (batchid,starttime,endtime)
2 as
3 select 12957, '10:15', '10:25' from dual union all
4 select 13032, '10:16', '10:20' from dual union all
5 select 13080, '10:16', '10:22' from dual union all
6 select 13090, '10:16', '10:20' from dual union all
7 select 13214, '10:19', '10:30' from dual union all
8 select 13232, '10:19', '10:22' from dual union all
9 select 13276, '10:19', '10:29' from dual union all
10 select 13279, '10:19', '10:30' from dual union all
11 select 13315, '10:20', '10:23' from dual union all
12 select 13341, '10:20', '10:24' from dual union all
13 select 13430, '10:22', '10:33' from dual union all
14 select 13566, '10:27', '10:30' from dual union all
15 select 13580, '10:27', '10:31' from dual union all
16 select 13585, '10:28', '10:31' from dual union all
17 select 13596, '10:28', '10:32' from dual union all
18 select 13626, '10:30', '10:42' from dual union all
19 select 13637, '10:32', '10:35' from dual union all
20 select 13699, '10:40', '10:44' from dual union all
21 select 13702, '10:41', '10:45' from dual
22/
Table created.
介紹開始和你要報告的時間間隔結束作爲綁定變量。您可以通過其引導冒號來識別SQL和PL/SQL中綁定變量的使用。
SQL> var START_X_AXIS varchar2(5)
SQL> var END_X_AXIS varchar2(5)
SQL> begin
2 :START_X_AXIS := '10:15';
3 :END_X_AXIS := '10:41';
4 end;
5/
PL/SQL procedure successfully completed.
並且爲了清楚起見,在三個階段執行查詢。首先將varchar2時間轉換爲實際日期(順便提一句,建議也是像這樣存儲它們)。第二個查詢顯示您的報告在X軸上的所有分鐘數。第三個是計數。
SQL> with mytable_with_real_dates as
2 (select batchid
3 , to_date(starttime,'hh24:mi') starttime
4 , to_date(endtime,'hh24:mi') endtime
5 from mytable
6 )
7 , all_minutes as
8 (select to_date(:START_X_AXIS,'hh24:mi') + numtodsinterval(level-1,'minute') minute
9 from dual
10 connect by level <= 24 * 60 * (to_date(:END_X_AXIS,'hh24:mi') - to_date(:START_X_AXIS,'hh24:mi')) + 1
11 )
12 select to_char(m.minute,'hh24:mi')
13 , count(t.batchid)
14 from all_minutes m
15 left outer join mytable_with_real_dates t on (m.minute between t.starttime and t.endtime)
16 group by m.minute
17 order by m.minute
18/
TO_CH COUNT(T.BATCHID)
----- ----------------
10:15 1
10:16 4
10:17 4
10:18 4
10:19 8
10:20 10
10:21 8
10:22 9
10:23 7
10:24 6
10:25 5
10:26 4
10:27 6
10:28 8
10:29 8
10:30 8
10:31 5
10:32 4
10:33 3
10:34 2
10:35 2
10:36 1
10:37 1
10:38 1
10:39 1
10:40 2
10:41 3
27 rows selected.
編輯:我剛剛看到您的評論,您的列存儲爲日期。這是個好消息,所以你可以跳過第一部分,從第7行開始,用單詞「WITH」替換逗號。
Regards,
Rob。
「startTime」和「endTime」的數據類型是什麼? –
startTime和endTime是日期/時間格式。 – Dean