oracle 按时间段统计数据用哪个函数?求大神帮忙!

要按时间段来统计数据有什么好的办法?例如有个表A姓名科室医生日期a1k1s12013-3-159:28:48a1k1s22013-3-228:38:23a2k2s3201... 要按时间段来统计数据有什么好的办法?例如有个表A
姓名 科室 医生 日期
a1 k1 s1 2013-3-15 9:28:48
a1 k1 s2 2013-3-22 8:38:23
a2 k2 s3 2013-3-15 22:03:17
a2 k1 s2 2013-3-22 16:38:23
a3 k3 s4 2013-3-15 02:33:17
a4 k1 s1 2013-3-15 10:28:48
我需要统计3月份里8:00:00-11:59:59 、12:00:00-17:59:59、18:00:00-7:59:59三个时间段内每个医生看了多少个病人!不知道用什么函数处理方便,想找个执行效率高的方法处理,求大神帮忙谢谢!
展开
 我来答
HaiziCattle
2014-02-17 · TA获得超过125个赞
知道小有建树答主
回答量:298
采纳率:0%
帮助的人:192万
展开全部
设置一个临时表 t_date,设开始时间,结束时间,时间性质 三个字段
插入您需要的时间段
2013-3-15 8:00:00 2013-3-15 11:59:59 工作日
2013-3-15 12:00:00 2013-3-15 17:59:59 工作日
2013-3-15 18:00:00 2013-3-16 7:59:59 工作日
2013-3-16 8:00:00 2013-3-16 11:59:59 双休日
2013-3-16 12:00:00 2013-3-16 17:59:59 双休日
2013-3-16 18:00:00 2013-3-17 7:59:59 双休日
采用表关联获得您需要的统计数据
select t.开始时间 ,t.结束时间,a.科室,a.医生,count(*)
from A,t_date t
where a.日期>= t.开始时间 and a.日期<= t.结束时间
group by t.开始时间 ,t.结束时间,a.科室,a.医生
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
micro0369
2014-02-16 · TA获得超过1.2万个赞
知道大有可为答主
回答量:9250
采纳率:85%
帮助的人:4027万
展开全部

大致如下:


select case when to_char(日期,'hh24:mi:dd') between '08:00:00' and '11:59:59' then  '08:00:00~11:59:59' 
      when  to_char(日期,'hh24:mi:dd') between '12:00:00' and '17:59:59' then  '12:00:00~17:59:59' 
      when to_char(日期,'hh24:mi:dd') between '18:00:00' and '23:59:59' or between '00:00:00' and '07:59:59' then  '18:00:00~07:59:59' 
      end 时间段,
      count(1) 病人数
from 表A
where to_char(日期,'yyyy-mm') = '2013-03'
group by 
case when to_char(日期,'hh24:mi:dd') between '08:00:00' and '11:59:59' then  '08:00:00~11:59:59' 
      when  to_char(日期,'hh24:mi:dd') between '12:00:00' and '17:59:59' then  '12:00:00~17:59:59' 
      when to_char(日期,'hh24:mi:dd') between '18:00:00' and '23:59:59' or between '00:00:00' and '07:59:59' then  '18:00:00~07:59:59' 
      end
追问
如果时间段在加个“双休日或节假日”的话要怎么统计?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
相逢及时
2014-02-17
知道答主
回答量:3
采纳率:0%
帮助的人:4200
展开全部
要分时间段,还要区别双休与节假日
要加双休的话还简单点

维度表:times_table b
维度表:times_table b
start_times end_times shijianduan times_day
08:00:00 11:59:59 1 1
12:00:00 17:59:59 2 1
08:00:00 11:59:59 1 2
12:00:00 17:59:59 2 2
08:00:00 11:59:59 1 3
12:00:00 17:59:59 2 3
08:00:00 11:59:59 1 4
12:00:00 17:59:59 2 4
08:00:00 11:59:59 1 5
12:00:00 17:59:59 2 5
08:00:00 11:59:59 1 6
12:00:00 17:59:59 2 6
08:00:00 11:59:59 1 7
12:00:00 17:59:59 2 7

select sum(xingming), --病人姓名
keshi, --科室
yisheng, --医生
shijianduan --时间段
(select a.xingming, --姓名
a.keshi, --科室
a.yisheng, --医生
a.riqi, --日期
case when b.shijianduan is null then 3 else b.shijianduan end as shijianduan --时间段
from table1 a
left join times_table b
on to_char(riqi,'hh24:mm:ss')>=start_times
and to_char(riqi,'hh24:mm:ss')<=end_times
and to_char(riqi,'day')=b.times_day --星期X
where to_char(riqi,'yyyymm')='201303')
group by keshi, --科室
yisheng, --医生
shijianduan --时间段

这个是针对一周中每天都可以自己分配时间段,双休自然也可以区分,节假日就麻烦了,我就懒得弄了,维度表得跟国家法定假日年年更新。
以上在记事本和excel写的,可能有点语法错误
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式