로우가 연속되지 않은 그룹에 대해서 별도 그룹으로 지정 방법 1 6 1,182

by sm5 [SQL Query] [2013.12.16 16:53:10]


문의 좀 드려요..

A B
1 2
1 2
2 4
2 4
1 2
1 2
1 2
이렇게 a,b 칼럼 값이 1,2 인 같은 구룹이 처음 하고 마지막에 두군데 있잖아요.
이 상태에서 a,b로 그룹바이 하면 두 구룹이 묶이잖아요
이렇게 말고 저 두룹을 실제는 같은 구룹이지만 다른 그룹으로 묶을수 있을까요,
즉, 로우가 연속되지 않은 그룹은 같은 그룹이라도 다른 그룹으로 인식되게요 ^^
단, 로우수는 데이타에 따라 변합니다.저건 샘플이구요



by 용근님 [2013.12.16 17:01:01]
Sequential group query 검색

by 손님 [2013.12.16 21:24:02]
감사합니다.

by 우리집아찌 [2013.12.16 17:32:01]
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)

by 손님 [2013.12.16 21:24:15]
감사합니다.

by 마농 [2013.12.16 17:33:27]
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)
;

by 손님 [2013.12.16 21:24:34]
감사합니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입