设置一个临时表 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.医生
大致如下:
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
要分时间段,还要区别双休与节假日
要加双休的话还简单点
维度表: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写的,可能有点语法错误