오라클 쿼리문 질문 드립니다. 0 4 278

by 철산92 [Oracle 기초] 오라클 쿼리 [2018.02.09 13:44:47]


오라클 쿼리를 잘몰라서 도움을 구하고자 질문드립니다.

어떻게해야 원하는 결과의 쿼리가 나오는지 알려주시면 감사하겠습니다. 

SELECT
          ADVICE0_PATIENT_SEQ   ,
          ADVICE0_YEAR   ,
          TO_CHAR(ADVICE0_INSERT_DATE, 'YYYYMMDD') AS ADVICE0_INSERT_DATE                          
          FROM
                PLAN_ADVICE0

현재 select시 나오는 결과 값

ADVICE0_PATIENT_SEQ      ADVICE0_YEAR             ADVICE0_INSERT_DATE

1723                                   2018                            20180126
1723                                   2017                            20161101
1725                                   2018                            20180113
1725                                   2017                            20161101
1726                                   2018                            20180113
1726                                   2017                            20161101
1727                                   2018                            20180113
1727                                   2017                            20161101
1761                                   2017                            20161101
1762                                   2017                            20161101

 

select시 원하는 결과 값

ADVICE0_PATIENT_SEQ      ADVICE0_YEAR             ADVICE0_INSERT_DATE

1723                                   2018                            20180126
1725                                   2018                            20180113
1726                                   2018                            20180113
1727                                   2018                            20180113
1761                                   2017                            20161101
1762                                   2017                            20161101

원하는 결과의 쿼리는 중복되는 seq가 제일 최신년도에 값으로 출력되길 원합니다.

 

 

 

 

by 우리집아찌 [2018.02.09 13:53:35]
WITH PLAN_ADVICE0 ( ADVICE0_PATIENT_SEQ , ADVICE0_YEAR , ADVICE0_INSERT_DATE) AS (
SELECT 1723 , '2018' , TO_DATE('20180126','YYYYMMDD') FROM DUAL UNION ALL
SELECT 1723 , '2017' , TO_DATE('20161101','YYYYMMDD') FROM DUAL UNION ALL
SELECT 1725 , '2018' , TO_DATE('20180113','YYYYMMDD') FROM DUAL UNION ALL
SELECT 1725 , '2017' , TO_DATE('20161101','YYYYMMDD') FROM DUAL UNION ALL
SELECT 1726 , '2018' , TO_DATE('20180113','YYYYMMDD') FROM DUAL UNION ALL
SELECT 1726 , '2017' , TO_DATE('20161101','YYYYMMDD') FROM DUAL UNION ALL
SELECT 1727 , '2018' , TO_DATE('20180113','YYYYMMDD') FROM DUAL UNION ALL
SELECT 1727 , '2017' , TO_DATE('20161101','YYYYMMDD') FROM DUAL UNION ALL
SELECT 1761 , '2017' , TO_DATE('20161101','YYYYMMDD') FROM DUAL UNION ALL
SELECT 1762 , '2017' , TO_DATE('20161101','YYYYMMDD') FROM DUAL 
)

SELECT ADVICE0_PATIENT_SEQ , ADVICE0_YEAR , ADVICE0_INSERT_DATE 
  FROM (SELECT ADVICE0_PATIENT_SEQ   
            , ADVICE0_YEAR   
            , TO_CHAR(ADVICE0_INSERT_DATE, 'YYYYMMDD') AS ADVICE0_INSERT_DATE 
            , ROW_NUMBER() OVER(PARTITION BY ADVICE0_PATIENT_SEQ ORDER BY ADVICE0_YEAR DESC ,ADVICE0_INSERT_DATE DESC ) RN
          FROM PLAN_ADVICE0
        )
 WHERE RN = 1    
 ORDER BY ADVICE0_PATIENT_SEQ

 


by 철산92 [2018.02.09 14:27:01]

문제해결 도움이 됐습니다. 감사합니다.


by 마농 [2018.02.09 14:27:53]

조회항목이 3개 컬럼 외에 더 필요하다면 row_number 을 이용하세요.
조회항목이 3개 컬럼 뿐이라면? 그냥 group by max 하셔도 되겠네요.

SELECT advice0_patient_seq
     , MAX(advice0_year) advice0_year
     , TO_CHAR(MAX(advice0_insert_date), 'yyyymmdd') AS advice0_insert_date
  FROM plan_advice0
 GROUP BY advice0_patient_seq
 ORDER BY advice0_patient_seq
;

 


by 철산92 [2018.02.09 18:02:13]

알지 못했던 좋은 방법 알려주셔서 감사합니다. 도움이 많이 됐습니다.

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