MariaDB 빠른 팁 #5 - 날짜 및 시간 시퀀스 만들기

4799 단어 mysqlsqlmariadb

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);



좋은 웹페이지 즐겨찾기