sql - 带条件的 Postgresql LAG

标签 sql postgresql

我的数据如下所示:

<表类=“s-表”> <标题> id 用户 数据 日期 <正文> 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

我想获得该用户的每行数据与上一行数据之间的差异,如下所示:

<表类=“s-表”> <标题> id 用户 数据 日期 差异 <正文> 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 功能来做到这一点,但不要求差异用户必须相同。我怎样才能用postgres中的条件来做到这一点?

最佳答案

我们可以使用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 - 带条件的 Postgresql LAG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75374919/

相关文章:

sql - 在单个查询中设置和选择?

sql - 如何将时间段划分为部分?

sql - PostgreSQL 中具有动态间隔的累计和

php - 将 SQL 时间值传递给 Javascript?

JavaPreparedStatement语法问题

mysql - 如何从表 MySQL 中仅获取 NULL 值

postgresql - 我如何在用户 ID 级别删除重复记录?

sql - 在 SQL Server 中查看与表

node.js - 如何修复 'error: syntax error at or near "end"' 来自 NodeJS 中 pg 依赖的错误?

sql - 交叉表查询提供了意外的结果