趣味题2:判断记录连续性的问题

1、大致的需求是使用SQL来判断记录的连续性,并找到每段记录的最小值和最大值。

    核心思想是通过和ROWNUM的比较,给不同的时间段分配不同的值,然后根据这个值进行GROUP。需要额外注意的是,首先要保证记录是按照顺序读取的,否则的话,会导致记录错误的分段。其次需要注意的是时间的处理,这里是将年和月的信息存在一个字符串中,但是判断记录是否连续需要根据时间的规则处理。而且,每个月包含的天数是不一致的,因此,需要使用处理月份的函数。

select min(time) ||‘~’|| max(time) from (

select time,months_between(to_date(time,'YYYY-MM'),add_months(trunc(sysdate,'MM'),rownum)) interval from (select time from test order by time)) group by interval;

其实就是以现在的时间作为参照物,如果是连续的日期的话,sysdate + MM - time 的时间差是不变的,然而如果time跳跃了,那么他们的时间差会越来越小,我现在就用这个时间差作为分组对象,进行分组,取出最大的和最小的时间,就是他的区间了;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值