조건별 MAX 값 가져오는 쿼리 1 4 605

by 기술을배울걸 [SQL Query] [2021.10.01 17:26:52]


안녕하세요 

쿼리를 하다보니 도저히 답을 못찾아서 질문드립니다.

아래의 테이블에서  

해당년월(날짜),  이름기준으로 seq가 MAX인 row를 가져오는 쿼리가 궁금합니다.

혹시 아시는분 꼭 알려주세요 ..ㅜㅜ

감사합니다.

 

1>날짜/구분1/2/3/부서/이름 동일하고 seq가 MAX인값

2>쿼리후 결과값은

 아래에서부서 6개의 값이 나와야함

---------------------------------------------------

 정답 

202110 1 T E10 214027 1 1
202110 2 B A10 204005 1 1
202110 2 B A10 204005 1 3
202110 2 B A10 204005 2 2
202110 2 B A10 204005 2 1
202110 2 B A10 204005 1 2

---------------------------------------------------------------------------------------

문제

날짜  seq 구분1 부서 이름 구분2 구분3
202110 1 B A10 204005 1 2
202110 1 B A10 204005 2 1
202110 1 T E10 214027 1 1
202110 2 B A10 204005 1 1
202110 2 B A10 204005 1 3
202110 2 B A10 204005 2 2
202110 2 B A10 204005 2 1
202110 2 B A10 204005 1 2

 

 

by 동동동 [2021.10.01 17:43:47]
WITH TMP ("날짜", seq, "구분1", "부서", "이름", "구분2", "구분3") AS (
SELECT '202110', 1, 'B', 'A10', '204005', 1, 2 FROM DUAL UNION ALL
SELECT '202110', 1, 'B', 'A10', '204005', 2, 1 FROM DUAL UNION ALL
SELECT '202110', 1, 'T', 'E10', '214027', 1, 1 FROM DUAL UNION ALL
SELECT '202110', 2, 'B', 'A10', '204005', 1, 1 FROM DUAL UNION ALL
SELECT '202110', 2, 'B', 'A10', '204005', 1, 3 FROM DUAL UNION ALL
SELECT '202110', 2, 'B', 'A10', '204005', 2, 2 FROM DUAL UNION ALL
SELECT '202110', 2, 'B', 'A10', '204005', 2, 1 FROM DUAL UNION ALL
SELECT '202110', 2, 'B', 'A10', '204005', 1, 2 FROM DUAL
)
SELECT * FROM TMP
WHERE (날짜, 이름, seq) IN ((SELECT 날짜, 이름, MAX(seq) FROM TMP GROUP BY 날짜, 이름))

 


by 기술을배울걸 [2021.10.05 08:55:17]

먼저 답변감사드립니다. 또한 제가 답변이 너무 늦었습니다. ㅜㅜ

쿼리를 제가 이해를 못했습니다. ㅜㅜ


by 마농 [2021.10.01 18:29:29]
SELECT *
  FROM (SELECT 날짜, 구분1, 구분2, 구분3, seq, 부서, 이름
             , ROW_NUMBER() OVER(PARTITION BY 날짜, 구분1, 구분2, 구분3, 부서, 이름 ORDER BY seq DESC) rn
          FROM t
        ) a
 WHERE rn = 1
;

 


by 기술을배울걸 [2021.10.05 08:54:26]

답변이 늦어 죄송합니다. ㅜㅜ 먼저  답변 주셔서 감사합니다.

근데 위와 같이 할경우 [날짜, 구분1, 구분2, 구분3,  부서, 이름] seq 기준으로 order by 순으로 해도

나머지는 모두 같고 seq만 다를 경우  row number 1/2로 나와야하는데... 왜 1,1로 동일하게. row nuber 나올까요...ㅜㅜ

==========================

앗 다시해보니 정상적으로 됩니다 너무 감사합니다.

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