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

SQL存储过程:按指定时间间隔合并时间槽并汇总参数列需求

解决方案:按指定时间间隔合并时间槽并汇总参数

要实现将现有时序数据按指定间隔合并时间槽,并对三个参数列求和,我们可以利用SQL的窗口函数LEAD()来高效完成这个需求——它能帮我们获取每条记录的下一个时间点,进而组成时间槽,同时汇总当前行与下一行的参数值。

核心思路

  1. 为每条记录获取下一个时间点,用来组成Time-slot的结束时间;
  2. 将当前行的参数值与下一行的参数值相加,得到时间槽内的汇总结果;
  3. 过滤掉无法组成时间槽的最后一条记录(因为它没有下一个时间点)。

具体SQL实现

假设你的存储过程输出已经存储在临时表#TempData中(或者可以直接调用存储过程插入临时表),以下是完整的代码:

-- 1. 创建临时表存储存储过程的输出(如果存储过程无法直接在CTE中调用)
CREATE TABLE #TempData (
    Time TIME,
    [Parameter 1] DECIMAL(10,2),
    [Parameter 2] INT,
    [Parameter 3] INT
);

-- 2. 执行存储过程,传入指定间隔参数(比如30分钟),将结果插入临时表
INSERT INTO #TempData
EXEC YourStoredProcedureName @Interval = 30; -- 替换为你的存储过程名和参数

-- 3. 生成时间槽并汇总参数
WITH TimeSeriesWithNext AS (
    SELECT
        Time,
        -- 获取下一个时间点,用于组成时间槽
        LEAD(Time) OVER (ORDER BY Time) AS NextTime,
        [Parameter 1],
        [Parameter 2],
        [Parameter 3]
    FROM #TempData
)
SELECT
    -- 拼接时间槽文本,格式匹配你的期望输出
    CONVERT(VARCHAR(5), Time, 108) + ':00 - ' + CONVERT(VARCHAR(5), NextTime, 108) + ':00' AS [Time-slot],
    -- 对参数求和,保留两位小数
    ROUND([Parameter 1] + LEAD([Parameter 1]) OVER (ORDER BY Time), 2) AS [Parameter 1],
    [Parameter 2] + LEAD([Parameter 2]) OVER (ORDER BY Time) AS [Parameter 2],
    [Parameter 3] + LEAD([Parameter 3]) OVER (ORDER BY Time) AS [Parameter 3]
FROM TimeSeriesWithNext
-- 过滤掉最后一条没有下一个时间点的记录
WHERE NextTime IS NOT NULL
ORDER BY Time;

-- 4. 清理临时表
DROP TABLE #TempData;

关键细节说明

  • LEAD()窗口函数:它会按照ORDER BY Time的顺序,为每条记录取下一行的对应值(时间或参数),这是实现时间槽合并的核心,不需要复杂的自连接或分组计算;
  • 时间格式调整:使用CONVERT(VARCHAR(5), Time, 108)来提取小时和分钟部分,拼接后得到你期望的HH:MM:SS - HH:MM:SS格式;
  • 兼容性:如果你的SQL Server版本支持在CTE中直接调用存储过程,可以省略临时表步骤,直接在CTE中执行存储过程;
  • 通用适配:不管你的间隔是15、30、45还是60分钟,只要存储过程输出的是按固定间隔排列的时间点,这个代码都能直接生效。

验证示例

用你提供的输入数据测试,这个SQL会输出和你期望完全一致的结果:

  • 时间槽8:00:00 - 8:30:00的Parameter 1为7.6 + 7.52 = 15.12;
  • 时间槽8:30:00 - 9:00:00的Parameter 1为7.52 + 20.6 = 28.12,以此类推。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:22:51