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

ClickHouse计算当前与前一行差值(delta)及百分比实现方法

若查询过程中支持对行进行索引标记,将为这类计算带来极大便利。

相邻行单列数值差值、比值计算方法

要实现连续相邻行的数值差、百分比计算,直接使用SQL标准窗口函数LAG()即可,无需额外手动标记行索引。

核心实现

你给出的参考逻辑存在一处字段引用错误:差值、比值的计算对象是按天聚合后的events统计值,而非day时间字段。结合你示例中使用的toStartOfDay语法(ClickHouse环境),可直接运行的SQL如下:

SELECT 
  toStartOfDay(stamp) AS day,  
  count() AS events,
  -- 计算当前行与上一行events的整数差值
  events - LAG(events) OVER (ORDER BY day) AS difference,
  -- 计算当前行与上一行events的比值,保留对应小数位
  round(events / LAG(events) OVER (ORDER BY day), 2) AS percent
FROM records
GROUP BY day 
ORDER BY day

关键函数说明

  • LAG(目标字段) OVER (ORDER BY 排序规则):按照指定排序顺序,提取当前行之前1位(默认偏移量)的目标字段值。结果第一行不存在前置行,函数默认返回NULL,和预期输出规则完全一致。
  • 如果需要取往前第N行的数据,只需传入第二个偏移参数即可,例如LAG(events, 3)代表取当前行往前第3行的events值。

输出结果

执行上述SQL后,输出结构和你给出的示例完全匹配:

dayeventsdifferencepercent
2022-01-06 00:00:00197NULLNULL
2022-01-07 00:00:006564593.32
2022-01-08 00:00:0015-6410.02
2022-01-09 00:00:007-80.47
2022-01-10 00:00:0013713019.57

注:示例中0.46、19.5的数值为小数保留规则差异,调整round函数的截断/四舍五入逻辑即可对齐结果。

内容的提问来源于stack exchange,提问作者Ismael Farfán

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:12:28