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

PostgreSQL中如何用LAG函数计算同一用户的相邻数据差值

在PostgreSQL中计算同一用户的上一行data差值

要实现仅计算同一用户的上一行data字段差值,只需在LAG()函数的OVER子句中添加PARTITION BY user来按用户分组,同时配合ORDER BY date保证分组内的行按时间顺序排列。

完整SQL语句

SELECT 
    id,
    "user",
    data,
    date,
    data - LAG(data) OVER (PARTITION BY "user" ORDER BY date) AS diff
FROM your_table
ORDER BY id;

关键说明

  • PARTITION BY "user":将整个数据集按user字段拆分,每个用户的数据形成独立的分组,LAG()函数只会在当前用户的分组内查找上一行数据
  • ORDER BY date:在每个用户分组内,按date字段排序,确保获取的是该用户时间上的前一条记录
  • 对于每个用户的第一条数据,LAG(data)会返回NULL,因此diff结果为空,和你期望的输出一致

执行结果

iduserdatadatediff
1112023-02-05
2212023-02-05
3122023-02-061
4132023-02-071
5252023-02-074

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

注:user是PostgreSQL的保留字,因此SQL中用双引号"user"包裹字段名以避免语法错误;若你的表中该字段名未使用保留字,可去掉双引号。

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:16:16