Exception
我只想获取进一步延期离开的初始日期,因为所有条目都将被视为一个初始日期。如何在列Emp_no | from_date | To_date | Initial_date
-------+------------+-----------+-------------
234 | 01-Dec-18 | 10-Dec-18 | 01-Dec-18
234 | 11-Dec-18 | 05-Jan-19 | 01-Dec-18
234 | 06-Jan-19 | 20-Jan-19 | 01-Dec-18
234 | 21-Jan-19 | 25-Jan-19 | 01-Dec-18
中获得上述结果?
这是一项额外的功能,用于计算休假管理软件中已批准或已获得的服务假总数,因为在以下情况下,员工每月可获得4份假:
所以我只想创建一个逻辑来整理已休假的假,并进一步延长到更多天,从而导致多次输入连续休假。
答案 0 :(得分:0)
尝试以下方式
select emp_id, from_date, to_date, (select min(from_date)
from TABLE_NAME T1
where t1.emp_id = t.emp_id) as inital_date
from TABLE_NAME T
where emp_id = 234;
答案 1 :(得分:0)
不确定我是否理解您的要求,但请尝试:
select emp_no, from_date, to_date, level lvl,
connect_by_root(from_date) initial_date
from tbl t1
start with
not exists (
select 1
from tbl t2
where t1.emp_no = t2.emp_no and t1.from_date = t2.to_date + 1)
connect by emp_no = prior emp_no and from_date = prior to_date + 1
使用这些样本数据:
with tbl(emp_no, from_date, to_date) as (
select 234, date '2018-12-01', date '2018-12-10' from dual union all
select 234, date '2018-12-11', date '2019-01-05' from dual union all
select 234, date '2019-01-06', date '2019-01-20' from dual union all
select 234, date '2019-01-21', date '2019-01-25' from dual union all
-- not continuous dates
select 234, date '2019-03-10', date '2019-03-17' from dual union all
select 234, date '2019-03-18', date '2019-03-25' from dual union all
-- other emp_no
select 407, date '2018-12-15', date '2019-01-07' from dual )
...我们得到以下结果:
EMP_NO FROM_DATE TO_DATE LVL INITIAL_DATE
------ ----------- ----------- ---------- ------------
234 2018-12-01 2018-12-10 1 2018-12-01
234 2018-12-11 2019-01-05 2 2018-12-01
234 2019-01-06 2019-01-20 3 2018-12-01
234 2019-01-21 2019-01-25 4 2018-12-01
234 2019-03-10 2019-03-17 1 2019-03-10
234 2019-03-18 2019-03-25 2 2019-03-10
407 2018-12-15 2019-01-07 1 2018-12-15
如果这不是您所需要的,请编辑您的问题并显示与更复杂的示例数据(例如上面的示例)匹配的必需输出。
说明:分层查询(connect by
)针对每个emp_no
不连续的日期查找,从这些点开始,将附加下一个连续的行。运算符connect_by_root
用于表示initial_date
。