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

BELATED ARTICLES

more