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生成连续时间

MySQL - 在匹配条件之后返回具有 n 个连续记录的所有记录

mysql/mariadb 中的数据库条目连续记录 - 直到今天

谷歌图表来自php数组的连续x轴

MySQL计算当前连续日期的连续日期