oracle数据库
表ta中有两个字段为姓名,日期
姓名 日期
张三 200801
张三 200802
张三 200803
李四 200801
李四 200808
李四 200809
王五 200806
王五 200807
王五 200808现在需要把表ta中日期有中断的记录查询出来,例如李四就是因为李四的日期从200801直接跳到200808,中间的月份没有。
谢谢!
表ta中有两个字段为姓名,日期
姓名 日期
张三 200801
张三 200802
张三 200803
李四 200801
李四 200808
李四 200809
王五 200806
王五 200807
王五 200808现在需要把表ta中日期有中断的记录查询出来,例如李四就是因为李四的日期从200801直接跳到200808,中间的月份没有。
谢谢!
from ta t
, (select name, max(mon_date) - min(mon_date)+1 mon,count(1) rec from ta group by name) t1
where t.name = t1.name
and t1.mon <> t1.rec;因为我的测试表mon_date用的是数字类型,若是日期类型则需要处理下
insert into t values('张三', 200801);
insert into t values('张三', 200802);
insert into t values('张三', 200803);insert into t values('李四', 200801);
insert into t values('李四', 200808);
insert into t values('李四', 200809);
commit;
end;select *
from (select user_name, work_date, next_date - work_date gap
from (select user_name,
work_date,
lead(work_date, 1, -1) over(partition by user_name order by work_date) next_date
from t))
where gap > 1
FROM (
SELECT user_name, work_date, lead(work_date) over(partition by user_name order by work_date) next_date
FROM t
)
WHERE months_between(to_date(next_date),to_date(work_date))>1;