WITH DATA_TEMP AS ( SELECT 1 CB_FLAG, 1 UPDT_DT UNION ALL SELECT 1 CB_FLAG, 2 UPDT_DT UNION ALL SELECT 0 CB_FLAG, 3 UPDT_DT UNION ALL SELECT 0 CB_FLAG, 4 UPDT_DT UNION ALL SELECT 1 CB_FLAG, 5 UPDT_DT UNION ALL SELECT 1 CB_FLAG, 6 UPDT_DT UNION ALL SELECT 1 CB_FLAG, 7 UPDT_DT UNION ALL SELECT 1 CB_FLAG, 8 UPDT_DT UNION ALL SELECT 0 CB_FLAG, 9 UPDT_DT UNION ALL SELECT 1 CB_FLAG, 10 UPDT_DT UNION ALL SELECT 1 CB_FLAG, 11 UPDT_DT UNION ALL SELECT 1 CB_FLAG, 12 UPDT_DT ) SELECT SUM(COLS) OVER (ORDER BY UPDT_DT) AS NEW_COLS , CB_FLAG , UPDT_DT FROM ( SELECT CB_FLAG , UPDT_DT , CASE WHEN LAG(CB_FLAG) OVER (ORDER BY UPDT_DT) = CB_FLAG THEN 0 ELSE 1 END COLS FROM DATA_TEMP ) BB ORDER BY UPDT_DT