1.按照日期排序,使用rank()函数得到排位值
select userid,date
rank() over(partition by userid order by date) rk
from tableA;
2.用日期减去排位值rk得到新的日期,记作new_date.new_date相同则为连续
举个栗子:
date
2017/1/2
2017/1/3
2017/1/4
2017/1/6
2017/1/8
2017/1/9
//求出rank值
select sour_date,
rank() over(order by sour_date) rk
from tablea;
//rank()函数是求排名的函数
date rk
2017/1/2 1
2017/1/3 2
2017/1/4 3
2017/1/6 4
2017/1/8 5
2017/1/9 6
select sour_date,rk,date_sub(sour_date,rk)new_date from tablea;
//date_sub()函数就是第一个参数(日期)减去第二个参数(天数)得到新的日期
//date_sub(2017/1/2,1)就是2017年1月2号减1天----->2017/1/1
sour_date rk new_date
2017/1/2 1 2017/1/1
2017/1/3 2 2017/1/1
2017/1/4 3 2017/1/1
2017/1/6 4 2017/1/2
2017/1/8 5 2017/1/3
2017/1/9 6 2017/1/3
//可以看到new_date相同的日期是连续的
//new_date为2017/1/1的日期是2017年的1月2号、3号、4号就是连续的几天