가령 스케줄러에서 5초 주기로 5초 전부터의 데이터를 가져오려고 한다고 해보자.
스케줄러 | 프로그램 실행 | 5초전 | 원하는 추출 시점 |
17:40:20 | 17:40:21 | 17:40:16 | 17:40:15 |
17:40:25 | 17:40:25 | 17:40:20 | 17:40:20 |
17:40:30 | 17:40:32 | 17:40:27 | 17:40:25 |
스케줄러에 등록된 프로그램 기동 시간 지연 등의 이유로 추출 기준시점이 틀어지는 문제를 예상해볼 수 있을 듯 하다.
trunc 와 NUMTODSINTERVAL을 조합해서 만들어 본 꽁수.
SELECT sysdate, trunc(sysdate, 'MI'),
sysdate - INTERVAL '5' SECOND,
trunc(sysdate, 'MI') + NUMTODSINTERVAL(floor(to_char(sysdate, 'SS') / 5) * 5 - 5, 'SECOND') t
FROM dual;
- NUMTODSINTERVAL - Converts a number or expression to an INTERVAL DAY TO SECOND type.
이전에 [MySQL]시간 올림, 내림에서 썼던 방식대신 여기서 사용한 방식을 mySQL에서 응용한다면 이런 식으로 하면 될 듯.
SELECT NOW(), FROM_UNIXTIME((UNIX_TIMESTAMP(NOW()) DIV 60) * 60) + INTERVAL FLOOR(SECOND(NOW()) / 5) * 5 - 5 SECOND AS t2
'Data' 카테고리의 다른 글
Uber 의 PostgreSQL -> MySQL 전환이라는 오래 된 기사 보고 (0) | 2021.06.23 |
---|---|
embulk 이용한 oracle -> mariaDB 데이터 벌크 이행 (0) | 2021.03.16 |
[MySQL]시간 올림, 내림 (0) | 2020.07.14 |
[DB]윈도우 함수 이용하여 직전 데이터 값 참조하기 (0) | 2020.07.10 |
[Python]pandas 의 to_sql 이용한 Bulk insert (0) | 2020.07.07 |