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

如何将CTE生成的DATETIME列表转换为不重复的<from>-<to>时间对?

解决CTE时间两两配对且不重复使用的问题

方法一:使用LEAD()窗口函数

直接利用窗口函数获取下一行的时间,再过滤奇数行号的记录,写法简洁高效:

SELECT
    datetime AS `from`,
    LEAD(datetime) OVER (ORDER BY rn) AS `to`
FROM your_final_cte
WHERE rn % 2 = 1;

方法二:自连接+奇数行筛选

如果更习惯自连接的写法,仅对奇数行号的记录做连接操作:

SELECT
    t1.datetime AS `from`,
    t2.datetime AS `to`
FROM your_final_cte t1
INNER JOIN your_final_cte t2 
    ON t2.rn = t1.rn + 1
WHERE t1.rn % 2 = 1;

原理说明

常规自连接(t1.rn = t2.rn -1)会生成所有相邻行的配对(比如1-2、2-3、3-4),而通过rn % 2 = 1筛选出奇数行号的记录,就能只保留1-2、3-4这类间隔配对,确保每个时间值仅被使用一次,完全匹配你需要的输出结果。

注意:这里默认你的CTE生成的rn是连续递增的整数(按datetime排序后的行号),如果行号存在断号情况,可以先用ROW_NUMBER()重新生成连续行号后再执行上述逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:50:18