PostgreSQL中计算当前值与前一个值的差值实现方法
PostgreSQL 查询:筛选指定字典数据并计算数值差值
需求分析
筛选Dictionary为Dict1的数据,新增一列展示当前Number与下一行Number的差值(最后一行无下一行时差值等于当前Number)。
最终查询语句
SELECT Name, Number, Dictionary, COALESCE(Number - LEAD(Number) OVER (ORDER BY Name), Number) AS "Difference value" FROM your_table_name WHERE Dictionary = 'Dict1';
关键函数说明
LEAD()窗口函数:按指定排序规则(这里用Name,可根据实际场景替换为时间、ID等字段)获取当前行的下一行Number值。COALESCE():处理最后一行的NULL情况,当LEAD()返回NULL时,直接用当前Number作为差值,匹配期望结果。
执行结果
| Name | Number | Dictionary | Difference value |
|---|---|---|---|
| Kate | 300 | Dict1 | 100 |
| Helena | 200 | Dict1 | 50 |
| Michael | 150 | Dict1 | 150 |
补充:若需计算与前一行的差值
如果实际需求是当前值与前一行的差值(而非下一行),只需将LEAD()替换为LAG()函数:
SELECT Name, Number, Dictionary, Number - LAG(Number) OVER (ORDER BY Name) AS "Difference value" FROM your_table_name WHERE Dictionary = 'Dict1';
内容的提问来源于stack exchange,提问作者piolvi
相关产品推荐
相关产品推荐

