데이터중에 제일 마지막에 입력된 데이터만 select하는 방법이요.. 1 2 1,042

by 동글이 [SQL Query] [2015.08.07 16:46:30]


seq id subject
1 aaa 과목2
2 aaa 과목1
1 bbb 과목1
2 bbb 과목3
3 bbb 과목2

id가 pk라고 보고 

seq가 입력 순서라고 보면

id로 group by 했을때

제일 마지막에 입력된 데이터만 출력하고 싶습니다.

seq id subject
2 aaa 과목1
3 bbb 과목2

 

마지막에 입력된 subject 컬럼을 알고싶어서 쿼리를 짜려고 하는데

쉬운거 같으면서도 어찌해야하는지...

seq가 반드시 2,3일리가 없고 100 ~101이 될수도 있는 가정하에

짜보고 싶은데 어찌해야할까요..

 

select subject

from table

where seq=(select max(seq) from table where id=table.id)

이거보다 더 좋은방법은 없을까요..?

 

by 창조의날개 [2015.08.07 16:56:24]
WITH TT(seq,	id,	subject) AS(
SELECT 1,	'aaa',	'과목2' FROM DUAL UNION ALL
SELECT 2,	'aaa',	'과목1' FROM DUAL UNION ALL
SELECT 1,	'bbb',	'과목1' FROM DUAL UNION ALL
SELECT 2,	'bbb',	'과목3' FROM DUAL UNION ALL
SELECT 3,	'bbb',	'과목2' FROM DUAL
)
SELECT seq,	id,	subject
FROM (
      SELECT TT.*
           , ROW_NUMBER () OVER (PARTITION BY ID ORDER BY SEQ DESC) RN
      FROM TT
)
WHERE RN = 1
;

 

WITH TT(seq,	id,	subject) AS(
SELECT 1,	'aaa',	'과목2' FROM DUAL UNION ALL
SELECT 2,	'aaa',	'과목1' FROM DUAL UNION ALL
SELECT 1,	'bbb',	'과목1' FROM DUAL UNION ALL
SELECT 2,	'bbb',	'과목3' FROM DUAL UNION ALL
SELECT 3,	'bbb',	'과목2' FROM DUAL
)
SELECT seq,	id,	subject
FROM TT
WHERE (seq,	id) IN (
      SELECT MAX(SEQ), ID
      FROM TT
      GROUP BY ID
)
;

 


by 동글이 [2015.08.07 17:02:21]

답변 너무 감사드립니다 !!

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