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

SQLite如何实现10小时滚动窗口SUM聚合查询?

SQLite 10小时滚动窗口求和实现方案

可行性说明

完全可以通过窗口函数实现该需求,SQLite 3.25.0及以上版本 原生支持标准窗口语法,无需额外扩展即可完成10小时滚动窗口的SUM聚合计算。

核心注意点

SQLite的窗口RANGE边界仅支持整数数值比较,因此需要先将DATETIME类型的Time字段转换为Unix时间戳(秒级整数),10小时对应的秒数为36000,以此作为窗口范围的计算依据。

具体实现代码

窗口函数方案(性能最优)

SELECT
  Time,
  Value,
  SUM(Value) OVER (
    -- 按时间戳升序排序,保证时间更早的行排在窗口前列
    ORDER BY strftime('%s', Time)
    -- 窗口范围:当前行时间往前推10小时 到 当前行时间
    RANGE BETWEEN 36000 PRECEDING AND CURRENT ROW
  ) AS SumValueLast10Hour
FROM Ticks
ORDER BY Time;

语法说明:

  • strftime('%s', Time):将DATETIME类型的时间转换为Unix时间戳,单位为秒
  • RANGE BETWEEN 36000 PRECEDING AND CURRENT ROW:定义窗口包含所有时间落在「当前行时间往前10小时」到「当前行时间」区间内的所有行,即使存在时间完全相同的行也能正确纳入计算,比基于行号的ROWS窗口更适合时间滚动场景。

兼容低版本SQLite的替代方案

如果使用的SQLite版本低于3.25不支持窗口函数,可以用关联子查询实现,兼容性更好但数据量大时性能低于窗口函数方案:

SELECT
  t1.Time,
  t1.Value,
  (
    SELECT SUM(t2.Value)
    FROM Ticks t2
    WHERE t2.Time BETWEEN DATETIME(t1.Time, '-10 hours') AND t1.Time
  ) AS SumValueLast10Hour
FROM Ticks t1
ORDER BY t1.Time;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:15:03