Mysql生成连续时间段记录
Posted ShenLiang2025
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql生成连续时间段记录相关的知识,希望对你有一定的参考价值。
需求说明
基于某个起始日期值,比如‘2021-9-1’,生成其之后的30天数据,结果类似:
2021-09-02、2021-09-03、2021-09-04...
问题分析
该需要看似简单,但想不借助交互式SQL即WHILE循环的方式,则得考虑借助自增辅助表来实现。自增辅助表的构造有几种方法,详见代码处的介绍:
-- # Way1 借助系统表作为自增辅助
SELECT DATE_FORMAT(DATE_SUB('2021-09-01', INTERVAL -pos DAY), '%Y-%m-%d') gendate
FROM(
SELECT ORDINAL_POSITION pos FROM information_schema.`COLUMNS`
WHERE TABLE_NAME = 'table_lock_waits_summary_by_table'
AND ORDINAL_POSITION <30
)A
-- # Way2 借助系统表生成自增辅助
SELECT DATE_FORMAT(DATE_SUB('2021-09-01', INTERVAL -num DAY), '%Y-%m-%d') gendate
FROM(
SELECT @row:=@row+1 num
FROM sys.metrics a,(SELECT @row:=0) b
)A
WHERE A.num<30
-- # Way3 借助CTE生成自增序列,mysql 8及以上版本
WITH RECURSIVE cte (num) AS
(
SELECT 1
UNION ALL
SELECT num + 1 FROM cte WHERE num < 30
)
SELECT DATE_FORMAT(DATE_SUB('2021-09-01', INTERVAL -num DAY), '%Y-%m-%d') gendate
FROM cte;
结果展示
以上是关于Mysql生成连续时间段记录的主要内容,如果未能解决你的问题,请参考以下文章
是否有一种方法可以将实时记录的音频片段连续发送到Flutter.io中的后端服务器?
MySQL - 在匹配条件之后返回具有 n 个连续记录的所有记录