我的数据是这样的:

id user data date
1 1 1 2023-02-05
2 2 1 2023-02-05
3 1 2 2023-02-06
4 1 3 2023-02-07
5 2 5 2023-02-07

我想要获得此用户的每行数据和前一行数据之间的差异,如下所示:

id user data date diff
1 1 1 2023-02-05
2 2 1 2023-02-05
3 1 2 2023-02-06 1
4 1 3 2023-02-07 1
5 2 5 2023-02-07 4

我可以做到这一点与滞后功能,但没有条件,用户必须是不同的.在波斯格雷斯有条件的情况下怎么做呢?

推荐答案

我们可以按如下方式使用LAG():

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

Sql相关问答推荐

JSON列之间的Postgr聚合

如何连接第二个表并将其内容输入到第一个表的单个字段中?

我如何计算字母a出现的字符串的次数?

有没有办法用SQL编写一条CASE语句,如果列A&>0,那么列B,列C=0

Access 365将文本转换回BigInt

当一个视图在Postgres中失效时?

从字符串中删除";1、";和";2,";,而不删除";11、";和";12、";

有没有办法在Postgres中存储带有时区的时间戳,而不将其转换为UTC

Select 非重复值并按条件排除行

如何将insert语句重复n次使一个值递增?

Haystack针相交-在元素最多的Haystack中查找集合

postgres中的条件索引和触发器

需要使用SQLite查询进行一些奇怪的时间转换

将用户授予另一个用户不授予权限

向表中添加新列取决于表的日期列(unpivot)

SAS proc freq 或 proc sql 获取数据子集和整个数据的频率

我们可以使用连接改进包含多个子查询的查询吗

Snowflake 中的对象是如何比较的?

SQL Server 查找存在于所有不同时期(或序列)中的条目

为什么这是 AND,OR with NULL 的真值表?