History 조회 - sequence number
2021. 7. 29. 17:10
728x90
기록을 조회할 때 가장 최근꺼를 보고싶은 경우, sequence 번호 중 가장 큰 숫자를 조회하는 방법이 있다.
[ Ex ] 고객이 프로그램 실행 중에 데이터를 여러 번 수정하다가 마지막에 실수로 upload 대신 delete를 눌러서 데이터를 삭제해버렸다고 하자. 이 고객은 삭제되기 전에 마지막으로 작성한 data를 가져오고싶다는 문의를 남겼다. 이 때, 우리는 어떻게 해야할까?
우선, 고객이 수정했던 기록들이 담긴 테이블을 보자.
ID SEQ REMARK
A 1 ...
A 2 ...
A 3 ...
실수한 고객의 ID는 A로 동일하므로 수정할 때마다 매겨진 SEQ (sequence number) 번호로 조회하면 된다.
'가장 최근 기록'은 '가장 마지막으로 TABLE에 INSERT되었다'는 것과 같으므로 우리는 SEQ 번호가 가장 큰 record를 찾으면 된다.
우선 테이블의 모든 데이터 중 가장 마지막 데이터를 조회하는 쿼리는 아래와 같다.
SELECT * FROM 테이블명 WHERE PID = 'A' AND SEQ = ' '
이 때, 아래의 2가지 방법 중 1개를 위의 쿼리에 서브쿼리로 입력해야한다.
-- 방법 1
SELECT TOP 1 * FROM 테이블명 WHERE ID = 'A' ORDER BY SEQ DESC
-- 방법 2
SELECT MAX(SEQ) FROM 테이블명 WHERE ID = 'A'
정리해보면 최종 쿼리문은 아래와 같다:
-- 방법1 적용
SELECT *
FROM 테이블명
WHERE PID = 'A' AND SEQ = (SELECT TOP 1 *
FROM 테이블명
WHERE ID = 'A'
ORDER BY SEQ DESC )
-- 방법2 적용
SELECT *
FROM 테이블명
WHERE PID = 'A' AND SEQ = (SELECT MAX(SEQ)
FROM 테이블명
WHERE ID = 'A')
*서브쿼리 사용 시, SEQ = ' ' 가 아니라 SEQ = ( ) 를 사용할 것.
728x90
'SQL > MSSQL' 카테고리의 다른 글
Transaction (0) | 2021.07.29 |
---|---|
Data Table 백업 (0) | 2021.07.29 |
DML언어_select/update/insert/delete (0) | 2021.07.29 |