【发布时间】:2014-05-12 04:38:28
【问题描述】:
假设我有一个 Oracle 10g 表,它记录了我系统上的所有响应时间。如何按日期获取计数缓慢的交易,包括没有交易缓慢的日期的零计数?
举个例子
create table response_times (system_datetime timestamp, server_name varchar2(3), response_time number(9));
insert into response_times (system_datetime, server_name, response_time)
values (to_date('01/05/2014 12:30', 'DD/MM/YYYY HH24:MI'), 'D01', 500);
insert into response_times (system_datetime, server_name, response_time)
values (to_date('01/05/2014 13:45', 'DD/MM/YYYY HH24:MI'), 'D02', 700);
insert into response_times (system_datetime, server_name, response_time)
values (to_date('01/05/2014 14:01', 'DD/MM/YYYY HH24:MI'), 'D01', 2500);
insert into response_times (system_datetime, server_name, response_time)
values (to_date('02/05/2014 07:45', 'DD/MM/YYYY HH24:MI'), 'D02', 2500);
insert into response_times (system_datetime, server_name, response_time)
values (to_date('02/05/2014 08:30', 'DD/MM/YYYY HH24:MI'), 'D02', 500);
我想查看响应时间超过 2000 毫秒的事务数,如下所示:
TRUNC(system_datetime) D01 D02
===================== === ===
2014/05/01 1 0
2014/05/02 0 1
2014/05/03 0 0
有没有办法在单个 sql 语句中检索它?在实践中会有数百万行,(希望)每天只有几个慢事务,并且在某些日子根本不会有慢事务。
现在我知道我可以编写一个简短的 PL/SQL 过程来使用候选日期的临时表来获取它,并使用一个循环来为每个时间段发出 select count(*) 以获得计数值,但是我希望有一种更优雅的方式......
【问题讨论】:
标签: sql oracle window-functions