查找当前值和先前值之间的差值- postgresql

uemypmqf  于 2022-12-18  发布在  PostgreSQL
关注(0)|答案(2)|浏览(155)

我试图编写一个查询,它将显示当前值和查询结果中前一个值之间的差异。在我看来,这可以用“OFFSET”或“LEAD”方法来完成。但我不知道如何实现。
她唱得很好。

Name    Number  Dictionary  
---
Kate    300     Dict1       
Helena  200     Dict1       
Michael 150     Dict1       
John    100     Dict2

我只想在查询中选择Dict1的数据,而在新列中,我需要查看“Number”查询结果中当前值和以前值之间的差异
x一个一个一个一个x一个一个二个x

xoefb8l8

xoefb8l81#

这对我来说是通过对字典本身进行分区来实现的。

SELECT name, number, dictionary, 
number - LEAD(number,1) OVER (PARTITION BY dictionary) as "Difference_value"
FROM users
WHERE dictionary = 'Dict1';

它还解决了从第一行(300-150)提取最后一行的问题。
如果您还想看到Dict 2的不同之处,则带有显式WHERE的最后一行是可选的。
DB-Fiddle

7fhtutme

7fhtutme2#

使用窗口函数LEAD

SELECT *, number - COALESCE(LEAD(number) OVER w,0)
FROM t
WHERE dictionary = 'Dict1'
WINDOW w AS (PARTITION BY dictionary ORDER BY number DESC
             ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING);

演示:db<>fiddle

相关问题