今天碰到的问题:
一张请假表.有请假人,请假开始时间,结束时间.
需求:统计从某时间段-某时间段.请假的人
问题点.需要从某个时间段,截取出某个时间段,做筛选.
比如:一个人从8月9号请假到8月23号销假.我要查询8月1号-8月10日请过假的人.如果用平时时间筛选,是做不到的.
解决:将请假到销假这个时间段拆分具体到日.然后通过时间段筛选日.
如何拆分?
1.建时间段虚表(关键)
例如(2018-10-26到 2018-11-25):
select date '2018-10-26' + (rownum - 1) dt from dual connect by rownum <= (date '2018-11-25' - date '2018-10-26' )
执行结果:
2.外连接关联时间段.
select distinct w2.personid,'3' type,'请假详细信息' title,
to_date(to_char(w1.dt,'yyyy/mm/dd') || ' 00:00:00','yyyy/mm/dd hh24:mi:ss') ,
to_date( to_char(w1.dt,'yyyy/mm/dd')||' 23:59:59','yyyy/mm/dd hh24:mi:ss'), 24 time
from (select date '2018-10-26' + (rownum - 1) dt from dual
connect by rownum <= (date '2018-11-25' - date '2018-10-26' + 1)) w1
inner join (select personid, leavedate, backdate from jcyy.z_jcyy_personholiday) w2
on w1.dt between w2.leavedate and w2.backdate where w2.personid = '1275000023739'
结果: