日期:2014-05-16  浏览次数:20502 次

Oracle 按时间段分组统计
create table T_DEMO
(
  SATISVACTION_ID VARCHAR2(10) not null,
  TEL_NUM         VARCHAR2(20) not null,
  SATISFY_DEGREE  VARCHAR2(15),
  INSERT_TIME     DATE,
  STAFF_ID        VARCHAR2(10)
)

想要按时间段分组查询,首先要了解level,connect by,oracle时间的加减.
关于level这里不多说,我只写出一个查询语句:
  ---level 是一个伪例
  select level from dual connect by level <=10
  ---结果:1	
	2
	3
	4
	5
	6
	7
	8
	9
	10

关于connect by可以看
http://www.cnblogs.com/johnnyking39/articles/1155497.html
oracle时间的加减看看试一下以下sql语句就会知道:
select sysdate -1 from dual
----结果减一天,也就24小时
select sysdate-(1/2) from dual
-----结果减去半天,也就12小时
select sysdate-(1/24) from dual
-----结果减去1 小时
select sysdate-((1/24)/12) from dual 
----结果减去5分钟
select sydate-(level-1) from dual connect by level<=10
---结果是10间隔1天的时间


下面是本次例子:
select dt, count(satisfy_degree) as num from T_DEMO  i ,
(select sysdate - (level-1) * 2 dt
from dual connect by level <= 10) d
where i.satisfy_degree='satisfy_1' and
i.insert_time<dt and i.insert_time> d.dt-2
group by d.dt  

例子中的sysdate - (level-1) * 2得到的是一个间隔是2天的时间
group by d.dt  也就是两天的时间间隔分组查询