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跳跃了,那么他们的时间差会越来越小,我现在就用这个时间差作为分组对象,进行分组,取出最大的和最小的时间,就是他的区间了;