반응형

이번에 개발을 하면서

- 1시간 안에 본인증 문자 발송이 5회 이상 안되도록

- 본인증이 완료가 되면 5회 카운터 초기화

이 2가지 조건을 만족하게 열심히 검색하고 쿼리를 만들어봤어요. 찾아보니 "5일 연속 지각" 이런 게시글이 많이 보여서 참고를 했어요.

01011112222 발송완료 2024/02/06 18:01:01
01011112222 인증완료 2024/02/06 18:00:01
01011112222 발송완료 2024/02/06 17:59:01
01011112222 발송완료 2024/02/06 17:58:01
01011112222 발송완료 2024/02/06 17:57:01
01011112222 발송완료 2024/02/06 17:56:01

샘플 데이터가 있어요

발송완료 2024/02/06 18:01:01
인증완료 2024/02/06 18:00:01
발송완료 2024/02/06 17:59:01
발송완료 2024/02/06 17:58:01
발송완료 2024/02/06 17:57:01
발송완료 2024/02/06 17:56:01

5번째에 인증을 완료했으므로 발송 횟수를 초기화

발송완료 2024/02/06 18:01:01 N
인증완료 2024/02/06 18:00:01 Y
발송완료 2024/02/06 17:59:01 N
발송완료 2024/02/06 17:58:01 N
발송완료 2024/02/06 17:57:01 N
발송완료 2024/02/06 17:56:01 N

6번째에는 발송이되야 하고

발송완료 2024/02/06 18:01:01 N
발송완료 2024/02/06 18:00:01 N
발송완료 2024/02/06 17:59:01 N
발송완료 2024/02/06 17:58:01 N
발송완료 2024/02/06 17:57:01 N
발송완료 2024/02/06 17:56:01 N

6번째에 발송이 안되어야 해요.

그럼 어떻게 이걸 체크를 했는지 쿼리를 작성해 볼게요.

 

SELECT
	CASE WHEN LISTAGG(YN) WITHIN GROUP (ORDER BY 등록시간) LIKE '%YYYYY%' THEN 'Y' ELSE 'N' END
FROM (
		SELECT 핸드폰번호,결과,등록시간
      		DECODE(결과,'발송완료','Y','N') AS YN
        FROM TABLE
        WHERE 등록시간 > SYSDATE - 1 / 24 --지금부터 1시간이내
        AND 핸드폰번호 = '01011112222'
        ORDER BY 등록시간 DESC
)

해당방법으로 Y가 연속으로 몇 개 있냐 이걸로 5번 발송요청 4번 발송요청 이렇게 조절을 할 수 있어요.

 

해당쿼리로

- 1시간 안에 본인증 문자 발송이 5회 이상 안되도록

- 본인증이 완료가 되면 5회 카운터 초기화

두 가지 조건을 만족하여 개발을 했습니다. 처음에 요건을 들었을 때 JAVA에서 풀어야 하나 고민을 했지만 역시 검색으로 힌트를 얻어 쿼리로 해결을 했어요.

반응형

'개발 > DB' 카테고리의 다른 글

Mysql 컬럼 예약어 사용  (0) 2021.01.18
MariaDB Sequence(10.3)이상  (0) 2020.11.12
반응형

오늘 테이블 생성중 칼럼에 예약어가 있어 테이블 생성이 안되어 알아보게 되었어요.

CREATE TABLE STATUS_INFO(
		STATUS_ID                     		INT(11)		 NOT NULL COMMENT '현황아이디',
		AREA_CODE                     		CHAR(10)		 NULL  COMMENT '지역코드',
		`DIV`                           		VARCHAR(1000)		 NULL  COMMENT '구분',
		`TYPE`                          		INT(10)		 NULL  COMMENT '유형',
		POPULATION                    		INT(10)		 NULL  COMMENT '인구수',		
		REG_DTM                       		CHAR(14)		 NULL  COMMENT '등록일',
		REG_ID                        		INT(11)		 NULL  COMMENT '등록자',
		MOD_DTM                       		CHAR(14)		 NULL  COMMENT '수정일',
		MOD_ID                        		INT(11)		 NULL  COMMENT '수정자'
) COMMENT='현황정보';

DIV, TYPE 컬럼이 예약어로 등록이 되어있어 일반 칼럼처럼 했더니 에러가 발생하여 ` <- 컬럼명 앞뒤로 묶어서 하면 해결이 돼요.

키보드 특수문자 제일 앞 Tab키 바로 위에 있어요.

보통 예약어는 제가 사용하는 툴에서는 파란색으로 표시가 나오는데 웬만한 툴에서는 이미지처럼 다른 게 표시가 나올 거예요

반응형

'개발 > DB' 카테고리의 다른 글

오라클 연속된 값 찾기  (1) 2024.02.06
MariaDB Sequence(10.3)이상  (0) 2020.11.12
반응형

MariaDB 시퀀스 지원을 하여 사용하게 되었어요.

이전 프로젝트에서는 시퀀스 테이블을 이용하던지 했는데 이번에 10.3 이상에서는 정식으로 지원을 하게 되어 사용하게 되었어요.

create-sequence

 

CREATE SEQUENCE

Creates a sequence that generates new values when called with NEXT VALUE FOR.

mariadb.com

//버전확인방법
SELECT version();

CREATE SEQUENCE SQ_FABS_BZOB_INFO START WITH 1 INCREMENT BY 1;

만드는 방법은 간단해요 시퀀스명, 시작 시점, 증가 값

NEXT VALUE FOR sequence
또는
NEXTVAL(sequence_name)
방법이있어요. 
Oracle에서 sequence_name.nextval 처럼 사용도 가능하다는데 Oracle mode (SQL_MODE=ORACLE)를 사용하면 
가능하다고 하는데 여기에는 적용이 안되어 위 두가지 방법중에 하나를 사용하고있어요

next-value-for-sequence_name

 

NEXT VALUE for sequence_name

Generate next value for a SEQUENCE. Same as NEXTVAL().

mariadb.com

 

반응형

'개발 > DB' 카테고리의 다른 글

오라클 연속된 값 찾기  (1) 2024.02.06
Mysql 컬럼 예약어 사용  (0) 2021.01.18

+ Recent posts