field a가 있습니다.
cnt field를 구하고 싶습니다.
row_number() OVER (partition by ... 을 생각해 봤지만 a의 종류가 2개밖에 안되서 원하는 결과가 안나오더군요..
WITH t AS ( SELECT 1 seq, 1 a FROM dual UNION ALL SELECT 2, 1 FROM dual UNION ALL SELECT 3, 1 FROM dual UNION ALL SELECT 4, 0 FROM dual UNION ALL SELECT 5, 0 FROM dual UNION ALL SELECT 6, 0 FROM dual UNION ALL SELECT 7, 1 FROM dual UNION ALL SELECT 8, 1 FROM dual UNION ALL SELECT 9, 1 FROM dual ) -- 정렬기준이 없어서 Seq 항목 추가했습니다. SELECT seq, a , ROW_NUMBER() OVER(PARTITION BY grp, a ORDER BY seq) cnt FROM (SELECT seq, a , ROW_NUMBER() OVER(ORDER BY seq) - ROW_NUMBER() OVER(PARTITION BY a ORDER BY seq) grp FROM t ) ORDER BY seq ;
감사합니다 제가 원하던 것이네요...
근데 잘 이해가 안가네요 ㅠㅠ 좀더 공부를 해봐야 겠습니다
문제는 중복되어 있는 값에 대해서, 어떻게 그룹핑 할 수 있는 규칙이 있느냐 입니다.
현재는 1의 값만 2개로 분할 된다고 작성해 봤네요..
WITH T AS ( SELECT 1 A FROM DUAL UNION ALL SELECT 1 FROM DUAL UNION ALL SELECT 1 FROM DUAL UNION ALL SELECT 0 FROM DUAL UNION ALL SELECT 0 FROM DUAL UNION ALL SELECT 0 FROM DUAL UNION ALL SELECT 1 FROM DUAL UNION ALL SELECT 1 FROM DUAL UNION ALL SELECT 1 FROM DUAL ) SELECT A ,ROW_NUMBER() OVER (PARTITION BY (CASE WHEN A = 1 AND MOD(ROWNUM,2) = 1 THEN 1+ MOD(A,2)/10 ELSE A END ) ORDER BY A) AS CNT FROM (SELECT A FROM T ORDER BY A ) C;