mysql 쿼리 질문입니다. 0 4 645

by 신짱 [MySQL] [2021.11.15 15:36:10]



mysql 쿼리 질문입니다.

그림과 같이 auto increment로 생성한 PK인 ID 컬럼과, 번호, 컬럼A, 컬럼B, 컬럼C, 최초등록일자, 최종등록일자로 이루어진 테이블입니다.

먼저 번호 컬럼을 그룹화하고 최종수정일자를 그룹화하면

번호 4020201은 2개의 최종수정일자 그룹이 존재하고

번호 4020202는 1개의 최종수정일자 그룹이 존재하고

번호 4020203은 2개의 최종수정일자 그룹이 존재합니다.

이때 최종수정일자 그룹이 2개 이상인 번호그룹만 남겨두고 또한 최종수정일자 그룹을 비교하여 수정일자가 이전일자인 row의 ID 값을 알고 싶습니다.

한번의 쿼리로 그림의 아래와 같은 결과를 조회하고 싶은데..

조언 부탁드립니다.

감사합니다!

 

by 우주민 [2021.11.15 15:54:16]
SELECT T1.*
FROM TABLE1 T1
,(
SELECT 번호, MIN(최종수정일자) AS 최종수정일자
FROM TABLE1
GROUP BY 번호
HAVING COUNT(DISTINCT 최종수정일자) > 1
) T2
WHERE T1.번호= T2.번호
AND T1.최종수정일자= T2.최종수정일자

결국은 번호별로 최종수정일자가 2종 이상인 것을 먼저 골라야 겠네요.

그리고 그 2종 중에 작은 값을 가져야 할테고요.

T2 에 기술한 항목이 위의 두가지 조건을 가지고 필터링 되는 항목 입니다.

그래서 번호와 최종수정일자를 원본과 다시 JOIN 해서 원하는 값을 도출할 수 있을 거 같네요


by 신짱 [2021.11.15 20:22:43]

자세한 답변 감사합니다.ㅎㅎ

이해가 쏙쏙 잘 되네요!


by 마농 [2021.11.16 09:50:35]
SELECT *
  FROM (SELECT *
             , RANK() OVER(PARTITION BY 번호 ORDER BY 최종수정일자) rk1
             , RANK() OVER(PARTITION BY 번호 ORDER BY 최종수정일자 DESC) rk2
          FROM t
        ) a
 WHERE rk1 = 1
   AND rk2 > 1
;

 


by 신짱 [2021.11.16 11:26:42]

마농님 답변 감사합니다! ㅎㅎ

많은 도움 되었습니다!

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