MariaDB 빠른 팁 #5 - 날짜 및 시간 시퀀스 만들기
MariaDB 팁과 요령
이것은 제가 1년 동안 축적한 일련의 빠른 팁과 요령 중 일부이며 다른 사람들에게 유용할 수 있다고 생각합니다.
비슷한 짧은 팁과 요령이 있으면 의견을 남겨주세요.
날짜 및 시간 시퀀스 만들기
날짜 및 시간과 관련된 데이터로 작업할 때 그룹화하거나 선택할 일련의 날짜를 생성해야 할 수 있습니다.
여기서 요령은 재귀적 CTE( Common Table Expression . . 읽기가 약간 까다로울 수 있지만 CTE가 하는 일은 각 재귀에 대해 하나의 추가 날짜/시간과 합집합을 만드는 것입니다. 더 많은 examples 은 MariaDb에서 찾을 수 있습니다. 그리고 구문은 보시다시피 SQL Server 구문과 매우 유사합니다.
아래 코드는 각 datetime 값 사이에 10분 간격으로 datetime 시퀀스를 생성합니다.
일반적으로 재귀와 마찬가지로 이것은 많은 리소스를 차지하고 느릴 수 있으므로 실행 횟수가 많은 프로덕션 코드에서는 사용하지 않는 것이 좋습니다. 그러나 데이터 분석 및 데이터 드릴의 경우 이 트릭은 매우 유용할 수 있습니다.
SET @stepSizeInMinutes = 10; -- Change this line to change the time interval
SET @from = '2017-01-01 00:00:00.00000';
SET @to = '2017-01-04 23:50:00.00000';
-- Create Recursive Discrete Table
WITH RECURSIVE Recursive_CTE AS
(
SELECT @from AS TimestampUtc
UNION ALL
SELECT TimestampUtc + INTERVAL @stepSizeInMinutes MINUTE
FROM Recursive_CTE
WHERE TimestampUtc < @to
)
SELECT *
FROM Recursive_CTE
ORDER BY TimestampUtc
MariaDB 시퀀스 엔진을 사용하여 시퀀스 생성
의 댓글에서 언급했듯이 팁 덕분에 MariaDB 시퀀스 엔진을 사용하여 날짜 시퀀스를 만들 수 있으며 이 솔루션은 재귀 CTE를 사용하는 것보다 훨씬 더 효과적입니다. 이에 대한 SQL은 다음과 같습니다.
SET @stepSizeInMinutes = 10; -- Change this line to change the time interval
SET @from = '2017-01-01 00:00:00.00000';
SET @to = '2017-01-04 23:50:00.00000';
SELECT @from + INTERVAL seq * @stepSizeInMinutes MINUTE AS `Datetime sequence`
FROM seq_0_to_99999999
WHERE seq BETWEEN 0 and (SELECT TIMESTAMPDIFF(MINUTE, @from, @to) / @stepSizeInMinutes);
Reference
이 문제에 관하여(MariaDB 빠른 팁 #5 - 날짜 및 시간 시퀀스 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/coderallan/mariadb-quick-tip-5-create-a-sequence-of-date-and-time-3p5m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)