행(ROW) 데이터에서 반복 패턴 데이터 찾는 방법 문의 드립니다. 0 3 1,188

by 오뚝이 [SQL Query] 반복 패턴 [2020.09.23 14:23:38]


안녕하세요

행(ROW) 데이터에서 반복된는 패턴의 데이터를 찾는 방법이 궁금합니다.

전혀 감이 안오네요...

수량 반복 CASE
10 CASE1
20
1  
60 CASE2
70
80  
1 CASE3
2
10 CASE1
20
30  
1 CASE3
2
10 CASE1
20
60 CASE2
70

CASE1(10, 20) 패턴 반복 : 3회
CASE2(60, 70) 패턴 반복 : 2회
CASE3(1, 2) 패턴 반복 : 2회

[결과]
수량          반복횟수
10, 20        3
60, 70        2
1,2            2

입니다.


도움 부탁드립니다.


 

by 마농 [2020.09.23 14:56:56]

항상 두개 묶음 반복인가요?
두개 이상 묶음이 반복되는 경우도 있는지?
있다면? 좀 모호해 질수도 있을 것 같습니다.
 (10,20) 과 (10,20,30) (20,30,40) 등이 반복 패턴이라면?
패턴이 서로 겹쳐서 판단이 쉽지 않을 듯 한데요?
위 예를 보면 (1,2,10,20)도 패턴으로 볼 수도 있을 것 같구요.
(1,2,10) (2,10,20) (2,10) 도 패턴으로 볼 수도 있을 것 같구요.

WITH t AS
(
SELECT 1 seq, 10 v FROM dual
UNION ALL SELECT  2, 20 FROM dual
UNION ALL SELECT  3,  1 FROM dual
UNION ALL SELECT  4, 60 FROM dual
UNION ALL SELECT  5, 70 FROM dual
UNION ALL SELECT  6, 80 FROM dual
UNION ALL SELECT  7,  1 FROM dual
UNION ALL SELECT  8,  2 FROM dual
UNION ALL SELECT  9, 10 FROM dual
UNION ALL SELECT 10, 20 FROM dual
UNION ALL SELECT 21, 30 FROM dual
UNION ALL SELECT 22,  1 FROM dual
UNION ALL SELECT 23,  2 FROM dual
UNION ALL SELECT 94, 10 FROM dual
UNION ALL SELECT 95, 20 FROM dual
UNION ALL SELECT 96, 60 FROM dual
UNION ALL SELECT 97, 70 FROM dual
)
SELECT x
     , COUNT(*) cnt
  FROM (SELECT SUBSTR(SYS_CONNECT_BY_PATH(v, ','), 2) x
             , LEVEL lv
          FROM (SELECT ROW_NUMBER() OVER(ORDER BY seq) rn
                     , v
                  FROM t
                )
         CONNECT BY PRIOR rn + 1 = rn
         -- AND LEVEL <= 2    -- 묶음 2개 제한 조건
        )
 WHERE lv > 1
 GROUP BY x
HAVING COUNT(*) > 1
;

 


by 오뚝이 [2020.09.23 16:07:13]

갓 마농님! 매번 감사드립니다.
반복 패턴은 어떤 형태로든 존재합니다.

항상 두개 묶음 반복인가요?
두개 이상 묶음이 반복되는 경우도 있는지?
있다면? 좀 모호해 질수도 있을 것 같습니다.
  >> 답변 : 2개 이상 묶음으로 반복 가능합니다.
               반복 패턴에 규칙 없습니다.


 (10,20) 과 (10,20,30) (20,30,40) 등이 반복 패턴이라면?
패턴이 서로 겹쳐서 판단이 쉽지 않을 듯 한데요?
위 예를 보면 (1,2,10,20)도 패턴으로 볼 수도 있을 것 같구요.
(1,2,10) (2,10,20) (2,10) 도 패턴으로 볼 수도 있을 것 같구요.
  >> 답변 : 데이터 패턴이 겹칠 수 있습니다.
                말씀하신 내용이 맞습니다.

* 주식 종목 체결 수량에서 반복적으로 채결되는 패턴이 있는지 찾고 있습니다.
* 최대 건수 : 일 100만건 예상

알려주신 방법으로 확인 후 결과 올리겠습니다.
감사합니다.

 


by 마농 [2020.09.23 16:12:41]

대용량 자료에서 해당 계층 쿼리 수행시 결과 속도가 잘 나올지 걱정입니다.
위에 (-- AND LEVEL <= 2    -- 묶음 2개 제한 조건)
이부분 주석 제거하고 적정 레벨까지만 수행하도록 해보세요.

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