【发布时间】:2020-01-09 18:38:47
【问题描述】:
【问题讨论】:
-
第一个间隔何时开始?当下一个 5 分钟间隔开始时 - 前一个间隔的强烈开始 + 5 分钟或最少时间超出前一个间隔?并指定 MySQL 版本。
-
第一个 5 分钟间隔从表中的第一条记录开始。第一个间隔 5 分钟后,下一个间隔开始,依此类推。 MYSQL的版本是8。
【问题讨论】:
测试
WITH RECURSIVE
cte AS ( SELECT MIN(`datetime`) AS dt_start,
MIN(`datetime`) + INTERVAL 5 MINUTE AS dt_end,
1 AS group_num
FROM sourcetable
UNION ALL
SELECT dt_end,
dt_end + INTERVAL 5 MINUTE,
group_num + 1
FROM cte
WHERE dt_end <= ( SELECT MAX(`datetime`)
FROM sourcetable )
)
SELECT sourcetable.*, cte.group_num
FROM sourcetable
JOIN cte ON `datetime` >= dt_start
AND `datetime` < dt_end
【讨论】:
如果您的 5 分钟间隔是基于日历时间,那么最有效的方法是使用窗口函数:
select t.*,
dense_rank() over (order by to_seconds(floor(data / 300))) as tr
from t;
如果它基于每个组中第一条记录的开始时间,那么您需要按照 Akina 的建议进行递归 CTE。
【讨论】: