如何在 SQL 中显示增量变化

How to show incremental changes in SQL

我有一个 sql (Presto) table,其中包含有关不同种类鸟类的数据。 table 包含有关不同月份在公园中观察到不同物种的频率的信息。有些物种在某些月份未被观察到,但仅在 07-9-1908-10-1905-11-19 上进行了测量。数据示例如下所示

Species        Period     Total (Cumulative) Observations (TCO)

Bird1           07-9-19            33
Bird1           08-10-19           45
Bird1           05-11-19           60
Bird2           07-9-10            20
Bird3            ....            ....
Bird3            ....            ....
....             ....            ....

我想在此 table 中添加一个新列,以捕获每个物种两天测量之间的增量变化。基于示例样本,我想产生以下结果:

Species        Period            TCO        Change

Bird1           07-9-19            33          33
Bird1           08-10-19           45          12
Bird1           05-11-19           60          15
Bird2           07-9-10            20          20
Bird3           08-10-19           5           5
Bird3           05-11-19           24          19
....             ....            ....

我想我找到了 a way to do this,但它相当复杂并且需要创建一个新的 table。我想知道是否有更简单的解决方案来解决我的问题(因为它比 link 中的问题稍微简单)。

您可以使用 window function lag() 恢复同一物种之前的 tco,周期性:

select 
    t.*,
    tco - lag(tco, 1, 0) over(partition by species order by period) change
from mytable

lag 的三参数形式允许您指定默认值而不是 null:根据您的预期结果,在这种情况下您需要 0