|
/*
本人菜鸟一枚想到这样一个办法:可以把截止当前行 0 出现的次数作为分组的依据,然后组内进行累加
代码如下: 其中的group_flag就是截止当前行sign_In=0出现的次数
*/
WITH T AS (
SELECT '2022-01-01' AS DT, 1 AS SIGN_IN FROM DUAL UNION
SELECT '2022-01-02' AS DT, 1 AS SIGN_IN FROM DUAL UNION
SELECT '2022-01-03' AS DT, 1 AS SIGN_IN FROM DUAL UNION
SELECT '2022-01-04' AS DT, 0 AS SIGN_IN FROM DUAL UNION
SELECT '2022-01-05' AS DT, 1 AS SIGN_IN FROM DUAL UNION
SELECT '2022-01-06' AS DT, 0 AS SIGN_IN FROM DUAL UNION
SELECT '2022-01-07' AS DT, 1 AS SIGN_IN FROM DUAL UNION
SELECT '2022-01-08' AS DT, 1 AS SIGN_IN FROM DUAL UNION
SELECT '2022-01-09' AS DT, 1 AS SIGN_IN FROM DUAL UNION
SELECT '2022-01-10' AS DT, 1 AS SIGN_IN FROM DUAL UNION
SELECT '2022-01-11' AS DT, 1 AS SIGN_IN FROM DUAL UNION
SELECT '2022-01-12' AS DT, 1 AS SIGN_IN FROM DUAL UNION
SELECT '2022-01-13' AS DT, 0 AS SIGN_IN FROM DUAL UNION
SELECT '2022-01-14' AS DT, 0 AS SIGN_IN FROM DUAL UNION
SELECT '2022-01-15' AS DT, 1 AS SIGN_IN FROM DUAL UNION
SELECT '2022-01-16' AS DT, 1 AS SIGN_IN FROM DUAL UNION
SELECT '2022-01-17' AS DT, 1 AS SIGN_IN FROM DUAL UNION
SELECT '2022-01-18' AS DT, 1 AS SIGN_IN FROM DUAL
)
,T1 AS (SELECT T.*,COUNT(DECODE(T.SIGN_IN,0,1)) OVER (ORDER BY DT) GROUP_FLAG FROM T)
SELECT T1.DT,T1.SIGN_IN,SUM(SIGN_IN) OVER (PARTITION BY GROUP_FLAG ORDER BY T1.DT) 连续签到 FROM T1; |
|