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)
이거보다 더 좋은방법은 없을까요..?
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 ) ;