You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为MySQL表中每一行生成时间序列?

解决方案

你只需要将生成时间序列的递归CTE和USER_TABLE做交叉连接(CROSS JOIN),就能得到每个用户对应全量时间序列的结果,无需临时表。

首先修正你原有的时间序列CTE:

  • 把时间间隔从1分钟改成10分钟,匹配需求
  • 修正起始时间和终止条件的逻辑,避免生成多余数据

完整SQL语句如下:

WITH RECURSIVE times AS (
    -- 起始时间,转换为日期类型便于计算
    SELECT STR_TO_DATE('2022-10-15 00:00:00', '%Y-%m-%d %H:%i:%s') AS ts
    UNION ALL
    -- 每次生成下一个10分钟的时间点
    SELECT ts + INTERVAL 10 MINUTE
    FROM times
    -- 终止条件:不超过当日最后一个10分钟间隔点
    WHERE ts < STR_TO_DATE('2022-10-15 23:50:00', '%Y-%m-%d %H:%i:%s')
)
-- 交叉连接用户表与时间序列,生成每个用户的全量时间条目
SELECT u.userid, DATE_FORMAT(t.ts, '%Y-%m-%d %H:%i:%s') AS timestamp
FROM USER_TABLE u
CROSS JOIN times t
ORDER BY u.userid, t.ts;

关键说明:

  • 递归CTEtimes负责生成指定日期内所有10分钟间隔的时间点
  • CROSS JOIN会自动将每个用户与所有时间点进行组合,完全匹配你期望的输出结构
  • 最终通过ORDER BY保证结果按用户ID、时间顺序排列

如果需要调整时间范围,只需修改CTE中的起始时间和终止时间即可。

内容的提问来源于stack exchange,提问作者bossdeep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 04:40:29