MySQL 월별/년 단위 반복 이벤트
저는 1/2/3/4/5 또는 6개월/년마다 발생할 수 있는 이벤트를 반복적으로 작업하고 있습니다.여기서 몇 가지 해결책을 찾았지만 대부분 며칠/주 단위입니다.
또한 나는 마감일 15일 전에 이벤트를 받아야 합니다.스크립트는 매일 자정에 실행되며 15일까지인 이벤트(알림)가 있는지 확인하고 알림(표에 삽입)을 보냅니다.
여기 제가 시도한 질문이 있습니다.
SELECT *, ABS(TIMESTAMPDIFF(SECOND, first_date - INTERVAL 15 DAY, CURDATE())) AS diff,
TIMESTAMPDIFF(SECOND, first_date, first_date + INTERVAL `repeat` * IF(repeat_type = '0', 1, 12) MONTH) AS tdiff FROM reminders
WHERE
ABS(TIMESTAMPDIFF(SECOND, first_date - INTERVAL 15 DAY, CURDATE())) %
TIMESTAMPDIFF(SECOND, first_date, first_date + INTERVAL `repeat` * IF(repeat_type = '0', 1, 12) MONTH) = 0
OR ABS(TIMESTAMPDIFF(SECOND, first_date, CURDATE())) = 0;
그repeat_type
알림이 월 단위로 발생하는지 또는 연간 단위로 발생하는지 결정합니다(0 = 월 단위, 1 = 년 단위).repeat
속성은 수량(1-6)입니다.
문제는 다름에 있다고 생각합니다(2차).TIMESTAMPDIFF
), 두 날짜의 차이를 계산하여 초수를 반환합니다.그러나 개월 수는 동일하지 않으며(28-31일), 해당 모듈로(%) 때문에 0을 반환하지 않는 경우도 있습니다.어떤 범위(modulo는 0 또는 <= 3일을 반환해야 함)로 이 문제를 해결할 수 있다고 생각했는데 어떤 값이 적절할지 잘 모르겠습니다.
오늘은 2018년 9월 12일(2018-09-12)입니다.2018-09-27일까지인 오늘부터 15일 동안 테이블에 몇 줄을 추가했습니다.쿼리 위를 실행할 때(없음)where
조항) 이해합니다.
+----+------+------------+--------+-------------+---------+----------+----------+
| id | type | first_date | repeat | repeat_type | message | diff | tdiff |
+----+------+------------+--------+-------------+---------+----------+----------+
| 19 | 0 | 2018-09-27 | 6 | 0 | A | 0 | 15638400 |
| 20 | 1 | 2018-09-27 | 1 | 1 | AA | 0 | 31536000 |
| 21 | 2 | 2018-09-27 | 1 | 1 | AAA | 0 | 31536000 |
| 22 | 3 | 2018-09-27 | 0 | 1 | AAAA | 0 | 0 |
| 23 | 1 | 2018-03-27 | 2 | 0 | OPA | 15897600 | 5270400 |
+----+------+------------+--------+-------------+---------+----------+----------+
마지막 행(2018-03-27부터 2개월마다 반복)을 보면 다음과 같은 결과가 나와야 합니다.where
절하지만 15897600% 5270400=86400 (하루입니다.
언급URL : https://stackoverflow.com/questions/52293494/mysql-repeating-events-monthly-yearly
'programing' 카테고리의 다른 글
SQL에서 NULL이 부울 식으로 전파되지 않는 이유는 무엇입니까? (0) | 2023.10.18 |
---|---|
자동 호출 기능 전 세미콜론? (0) | 2023.10.18 |
Excel/VBA: 단일 셀을 인수로 전달 (0) | 2023.10.18 |
Oracle sql developer 3.2에서 sql 워크시트 표시 전환 방법 (0) | 2023.10.18 |
주어진 코드의 복잡도 결정 (0) | 2023.10.18 |