如何用SQL计算行之间的差异?

lis*_*isa 4 sql difference

我的任务是创建一个表,其中包含一个新列,其中当前行和下一行的年龄之间存在差异。年龄应该按降序排列。可以用SQL来做吗?我不知道应该使用什么sql,并且任务中没有指定。

我明白括号里应该有一些东西

SELECT name, age, (...) AS difference
FROM Animals
ORDER BY age DESC;
Run Code Online (Sandbox Code Playgroud)

我有“动物”表

编号 | 名称 | 年龄
 1 | 莫莉 | 4
 2 | 杰克逊| 8
 3 | 旺卡 | 38
 4 | 波莉 | 7

结果表应如下所示:

  名称 | 年龄 | 不同之处
 旺卡 | 38 | 38 30
 杰克逊| 8 | 1
 波莉 | 7 | 3
 莫莉 | 4 |

for*_*pas 5

你需要lead()功能:

SELECT 
  name, 
  age, 
  age - lead(age) over (order by age desc, name) AS difference
FROM Animals
ORDER BY age DESC
Run Code Online (Sandbox Code Playgroud)

请参阅演示
结果:

> name    | age | difference
> :------ | --: | ---------:
> Wonka   |  38 |         30
> Jackson |   8 |          1
> Polly   |   7 |          3
> Molly   |   4 |       
Run Code Online (Sandbox Code Playgroud)