MAX를 이용한 데이터 추출 관련 문의 0 3 1,335

by 오호 [Oracle 기초] MAX [2019.05.09 13:58:19]


안녕하세요. 데이터 추출 관련해서 문의 드립니다. DATE컬럼의 MAX값으로 아래 표에 있는 붉은색 부분만 추출 하려고 하는데  밑에 쿼리로 DATE에 MAX를 걸면 전체가 

나오는데 붉은색 부분행만 추출할 수 있나요? 도움 부탁드립니다.

SELECT 
     ID, MAX(DATE) DATE, SEQ
FROM
      테이블
GROUP BY
     ID, SEQ

ID DATE SEQ
3173 20190308 4794354
3173 20190322 4794369
3173 20190304 4794374

 

by 마농 [2019.05.09 14:50:42]
-- 조회 항목이 몇개 안될 때 : KEEP(DENSE_RANK  --
SELECT id
     , MAX(date) date
     , MAX(seq) KEEP(DENSE_RANK LAST ORDER BY date) seq
  FROM 테이블
 GROUP BY id
;
-- 조회 항목이 많을 때 : ROW_NUMBER --
SELECT *
  FROM (SELECT id, date, seq
             , ROW_NUMBER() OVER(PARTITION BY id ORDER BY date DESC) rn
          FROM 테이블
        )
 WHERE rn = 1
;

 


by 느훼훼 [2019.05.09 14:53:35]

GROUP BY 절 때문에 그런거네요. 같은 ID와 SEQ 중에서 가장 큰 값을 가지고 오는거다보니 3개의 데이터를 

다 가지고 오는겁니다. ID는 동일하지만 SEQ가 다르기 때문이죠.

SELECT * FROM 테이블 WHERE DATE = (SELECT MAX(DATE) FROM 테이블)

이렇게 하면 되겠네요.


by 오호 [2019.05.09 15:17:20]

넵~ 감사합니다~

이것 저것 해보다가 마농님이 답변하신것 처럼 항목이 많을때는 row_number거는 수 밖에 없을거 같더라고요.

마온님이랑 느훼훼님 너무 감사합니다~~

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