在数据加工过程中经常需要统计连续几日的数据,普通方法较为繁琐,需要判断每一天的前一天与后一天是否是连续的,下面介绍一种通过观察连续数据特点得到的计算连续天数的计算方法。
初始数据如下图:
现需要将每一个XFSBH在相同的KPYF中KPRQ连续三天或三天以上存在记录的数据找出来 ,SQL如下:
SELECT *
FROM (SELECT FPDM,
FPHM,
XFSBH,
KPYF,
KPRQ,
JE,
RN,
KPRQ + RN,
COUNT(DISTINCT KPRQ) OVER(PARTITION BY XFSBH, KPRQ + RN) LXKPTS
FROM (SELECT FPDM,
FPHM,
XFSBH,
KPYF,
KPRQ,
JE,
DENSE_RANK() OVER(PARTITION BY XFSBH, KPYF ORDER BY KPRQ DESC) RN
FROM ABC T))
WHERE LXKPTS >= 3;
该sql的查询结果如下图所示:
计算思路如下:
1、首先按照XFSBH,KPYF分组并对KPRQ进行降序排列
2、利用连续的KPRQ与 降序排列的序号相加的结果都相等的原理计算连续日期的最后一天,即KPRQ+RN字段
3、按照XFSBH,KPRQ+RN分组并计算每组数据中不同KPRQ的数量,结果(LXKPTS)即为连续的天数
为便于理解,下图放出筛选大于等于3天之前数据全貌: