在表中减去同一列的两个记录

Lil*_*ily 2 sql postgresql window-functions

我正在使用PostgreSQL,我想减去同一个表的两个记录,并在同一个查询中使用结果.

这是表格:

比分

6
8
9


结果

6
2
1

我想做的事:

Result = Score(i) - Score(i-1)
Run Code Online (Sandbox Code Playgroud)

最后,我想要这些结果的总和.sum(result)在我的例子中必须是9.

Erw*_*ter 5

你需要一些方法来确定行的顺序score.关系数据库中的表中没有"自然顺序".所以我假设你有一个id(或时间戳或东西)来订购你的记录.或者i保证每一个新行都更大?然后你可以点击i.

查询本身很简单 - 一旦你发现了窗口函数:

SELECT i - lag(i, 1, 0) OVER (ORDER BY id) AS result
FROM   score
ORDER  BY id;
Run Code Online (Sandbox Code Playgroud)

包括@Clodoaldo的改进(见评论).

lag(i, 1, 0) OVER (ORDER BY id)
Run Code Online (Sandbox Code Playgroud)

相当于,但比以下更优雅:

COALESCE(lag(i) OVER (ORDER BY id), 0)
Run Code Online (Sandbox Code Playgroud)

目的是涵盖没有前一行的第一行的特殊情况.
在sqlfiddle上演示.

sum(result)是微不足道的,因为i根据你的描述,它必然等于最后一个:

SELECT i
FROM   score
ORDER  BY id DESC
LIMIT  1;
Run Code Online (Sandbox Code Playgroud)