티스토리 뷰

ETC

[MySQL] 날짜별 시퀀스번호

주인장 진빼이

현재 날짜를 기점으로 데이터가 삽입될 때마다 00001, 00002, 00003 씩 추가 되는 쿼리문이다.

쿼리문은 MySQL 기반으로 작성되었다.

해당 쿼리를 질의함으로서 다음에 사용되는 날짜별 시퀀스번호를 구할 수 있다.

 

만약 현재날짜를 기점으로 데이터가 없는 경우 00001부터 시작하고

30개의 데이터가 쌓였(00030)다고 가정하고, 그 다음날이 되면 00001부터 다시 시작된다.

 

쿼리 짜느라 이곳저곳에서 도움도 받고 고생좀했는데

역시.. 서브쿼리를 조금 더 깊게 배울 필요가 있어보인다.

SET @TODAYS = DATE_FORMAT(NOW(), '%y%m%d');
SELECT
	CONCAT(@TODAYS, LPAD(IFNULL(MAX(SUBSTR(SEQ, -5)), 1), 5, '0')) AS SEQ2
FROM (
	SELECT MAX(CAST(구매번호시퀀스컬럼 AS SIGNED))+1 AS SEQ FROM 구매정보테이블
	) AA
	WHERE AA.SEQ LIKE CONCAT(@TODAYS, '%')

구매번호시퀀스컬럼에 포함된 데이터는

21092900001

21092900002

21092900003

... 순차적으로 올라간다.

 

구매정보 테이블은 구매번호를 기점으로 데이터를 구분한다.

AI와 비슷하게 구매를 취소하더라도 다음 구매자는 +1 번호를 가지게 된다.

 

주의사항: 현재날짜보다 더 앞선 날짜(210930, 211001, 등) 정보가 있는 경우 MAX 함수에 문제가 발생하기 때문에 쿼리가 정상적으로 작동하지 않을 수 있음

 

개선하자!

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함