반응형
이번에 개발을 하면서
- 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 |