mysql 질문입니다 0 2 502

by 고래 [SQL Query] [2021.03.29 09:25:00]


안녕하세요.. mybatis에서 if 다이나믹태그를 할까 하다가 

아닌거 같아서 좋은 방법이 있나 여쭤봅니다.

 

상황이

ID / 명칭 /  중간,결과 / 진행,완료

1  / A / 중간 / 완료

2 / A / 결과 / 완료

3 / B / 중간 / 완료

4 / B / 결과 / 진행

5 / C / 중간 / 진행

6 / C / 결과 / 진행

 

이렇게 있다고 가정하면

제가 원하는 조회하고자 하는 데이터는

2 / A / 결과 / 완료

3 / B / 중간 / 완료

5 / C / 중간 / 진행 

 

입니다.

 

즉,

중간 결과중에 우선순위가 진행이 아닌 완료이고

중간 결과중에 둘다 진행일 경우 결과가 아닌 중간에 진행을 뽑고자합니다.

이렇게 할경우 WHERE을 어떤식으로 해야할까요..

정말어렵습니다 ㅠㅠㅠ 도와주세요 선생님들

 

by 마농 [2021.03.29 10:36:31]
WITH t AS
(
SELECT 1 id, 'A' nm, '중간' st1, '완료' st2
UNION ALL SELECT 2, 'A', '결과', '완료'
UNION ALL SELECT 3, 'B', '중간', '완료'
UNION ALL SELECT 4, 'B', '결과', '진행'
UNION ALL SELECT 5, 'C', '중간', '진행'
UNION ALL SELECT 6, 'C', '결과', '진행'
)
SELECT *
  FROM (SELECT id, nm, st1, st2
             , ROW_NUMBER() OVER(PARTITION BY nm
               ORDER BY st2
                      , CASE st2 WHEN '완료' THEN st1 END
                      , CASE st2 WHEN '진행' THEN st1 END DESC
                      ) rn
          FROM t
        ) a
 WHERE rn = 1
;

 


by 고래 [2021.03.29 11:01:09]

항상 감사드립니다 ^^

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