안녕하세요. 이스트럭(강동운)입니다.


연승쿼리 관련해서 정리해서 올려드립니다~!


Result: 1(승리), 0(패배)


결과.jpg



WITH GameResult AS

(

       SELECT 1 AS GameIDX, 1 AS UserIDX, 1 AS Result UNION ALL

       SELECT 1 AS GameIDX, 2 AS UserIDX, 0 AS Result UNION ALL

       SELECT 2 AS GameIDX, 1 AS UserIDX, 1 AS Result UNION ALL

       SELECT 2 AS GameIDX, 3 AS UserIDX, 0 AS Result UNION ALL

       SELECT 3 AS GameIDX, 3 AS UserIDX, 1 AS Result UNION ALL

       SELECT 3 AS GameIDX, 2 AS UserIDX, 0 AS Result UNION ALL

       SELECT 4 AS GameIDX, 1 AS UserIDX, 0 AS Result UNION ALL

       SELECT 4 AS GameIDX, 3 AS UserIDX, 1 AS Result UNION ALL

       SELECT 5 AS GameIDX, 1 AS UserIDX, 1 AS Result UNION ALL

       SELECT 5 AS GameIDX, 2 AS UserIDX, 0 AS Result UNION ALL

       SELECT 6 AS GameIDX, 1 AS UserIDX, 0 AS Result UNION ALL

       SELECT 6 AS GameIDX, 3 AS UserIDX, 1 AS Result UNION ALL

       SELECT 7 AS GameIDX, 2 AS UserIDX, 1 AS Result UNION ALL

       SELECT 7 AS GameIDX, 3 AS UserIDX, 0 AS Result

      

       UNION ALL SELECT 7 AS GameIDX, 1 AS UserIDX, 1 AS Result

       UNION ALL SELECT 8 AS GameIDX, 1 AS UserIDX, 1 AS Result

       UNION ALL SELECT 9 AS GameIDX, 1 AS UserIDX, 1 AS Result

       UNION ALL SELECT 10 AS GameIDX, 1 AS UserIDX, 1 AS Result

       UNION ALL SELECT 11 AS GameIDX, 1 AS UserIDX, 1 AS Result

)

SELECT

       UserIDX

,      MAX(TotalCount)

FROM

(

       SELECT

             UserIDX

       ,      COUNT(*) AS TotalCount

       FROM

       (

             SELECT

                    ROW_NUMBER() OVER(PARTITION BY UserIDX ORDER BY UserIDX, ROWNUM) - ROWNUM AS GROUPKEY

             ,      ROWNUM

             ,      UserIDX

             ,      GameIDX

             FROM

             (

                    SELECT

                           ROW_NUMBER() OVER(PARTITION BY UserIDX ORDER BY GameIDX) AS ROWNUM

                    ,      UserIDX

                    ,      GameIDX

                    ,      Result

                    FROM GameResult

             ) AAA

             WHERE Result = 1

       ) BBB

       GROUP BY UserIDX, GROUPKEY

) CCC

GROUP BY UserIDX




쿼리를 간단히 설명 드리면.. GameResult 라는 테이블에 ROW_NUMBER를 붙여서.. AAA 인라인 뷰를 생성하게 됩니다.

그럼 아래와 같은 테이블이 됩니다.


1.png


그 값을 토대로.. Result=1(승리인 것)만 필터링을 구하고 ..거기에 다시 ROWNUM(ROWNUM_NEW) 을 구하면 아래와 같은 테이블이 됩니다.


2.png


여기서 신기한 것은.. ROWNUM_NEW - ROWNUM을 하면.. 연승인 녀석들은 같은 그룹으로 묶이게 됩니다.


연속이 된다는 말은.. 처음 구한 rownum과 두번째 구한 rownum을 빼도 같은 값이 나오기 때문입니다. ^^


3.png


이 다음부터는.............. 설명드리지 않겠습니다~ㅋㅋ


연구좀 하면서 재미있었네요~~ 연구의 핵심은.. 연승인 놈들을 그룹을 지을 방법에 대해서 연구해봤네요~!


분명 방법이 있을 것 같은데...라고 ^^;


Deep Inside T-SQL 에 선분처리(507페이지 연결된 좌석번호 찾는 쿼리를 응용)를 참고해서 보다가 알게되었네요 ㅋㅋㅋ..


감사합니다.


혹시 더 좋은 쿼리 있으면 공유해주세요 ^^
No. Subject Author Date Views
Notice 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 479
1626 SSMS 최근 사용한 파일에 대한 설정 변경 jevida(강성욱) 2015.03.25 3699
1625 SSMS 상위 행 선택 및 수정 행 변경 jevida(강성욱) 2015.03.25 7103
1624 SSMS에서 변경 스크립트 자동 생성 jevida(강성욱) 2015.03.25 4110
1623 SSMS 명령 단축키 설정 jevida(강성욱) 2015.03.25 6672
1622 Min / Max Server Memory 설정 jevida(강성욱) 2015.03.24 14028
1621 Tempdb 장애 유형과 해결방안.(디스크 공간 및 경로 문제) jevida(강성욱) 2015.03.24 5366
1620 SQL Server ErrorLog에 백업 로그 남지기 않기 jevida(강성욱) 2015.03.24 4088
1619 SQL Server의 Errorlog는 어디에 저장 될까? jevida(강성욱) 2015.03.24 3783
1618 통계(Statistics) jevida(강성욱) 2015.03.23 5757
1617 활성 트랜잭션 찾기 jevida(강성욱) 2015.03.23 4068
1616 ForwardedRecord (행 이동에 대한 포워드) jevida(강성욱) 2015.03.23 3415
1615 인덱스 생성 순서에 따른내부 작업 변화 jevida(강성욱) 2015.03.23 5092
1614 SQL Server 성능 테스트 프로그램 minsouk 2015.01.17 6024
1613 extended events 를 이용한 wait 분석 minsouk 2014.07.25 6275
1612 동일기준에대해 복수컬럼 PIVOT 사용하기 열이 2014.06.27 21653
1611 SELECT / UPDATE / INSERT 쿼리를 쉽게 만들자... [1] Hisory 2014.05.12 10888
1610 ssms 자동 언어 변경이 되면, 이렇게 설정하세요 minsouk 2014.04.27 9584
1609 [QUERY] 그룹 번호 만들기 이스트럭(강동운) 2014.04.11 8767
» [QUERY]연승을 구해보자! [2] 이스트럭(강동운) 2014.04.11 9619
1607 VLF 이스트럭(강동운) 2014.04.11 8108





XE Login