WITH T AS ( SELECT '1' A ,'2' B FROM DUAL UNION ALL SELECT '1' ,'2' FROM DUAL UNION ALL SELECT '2' ,'4' FROM DUAL UNION ALL SELECT '2' ,'4' FROM DUAL UNION ALL SELECT '1' ,'2' FROM DUAL UNION ALL SELECT '1' ,'2' FROM DUAL UNION ALL SELECT '1' ,'2' FROM DUAL UNION ALL SELECT '1' ,'3' FROM DUAL UNION ALL SELECT '1' ,'3' FROM DUAL UNION ALL SELECT '1' ,'3' FROM DUAL) SELECT A , B FROM (SELECT A , B , ROW_NUMBER() OVER (PARTITION BY A , B ORDER BY ROWNUM ) - ROWNUM GRP , ROWNUM SEQ FROM T ) GROUP BY A, B ,GRP ORDER BY MIN(SEQ)
WITH t AS ( SELECT 1 seq, 1 a, 2 b FROM dual UNION ALL SELECT 2, 1, 2 FROM dual UNION ALL SELECT 3, 2, 4 FROM dual UNION ALL SELECT 4, 2, 4 FROM dual UNION ALL SELECT 5, 1, 2 FROM dual UNION ALL SELECT 6, 1, 2 FROM dual UNION ALL SELECT 7, 1, 2 FROM dual ) -- 이런 류의 문제에서 가장 중요한것은 정렬 순서입니다. -- 정렬을 위한 seq 항목을 추가했습니다. SELECT a, b , COUNT(*) cnt FROM (SELECT seq, a, b , ROW_NUMBER() OVER(ORDER BY seq) - ROW_NUMBER() OVER(PARTITION BY a, b ORDER BY seq) AS grp FROM t ) GROUP BY a, b, grp ORDER BY MIN(seq) ;