如何在 SQL 中显示增量变化
How to show incremental changes in SQL
我有一个 sql (Presto) table,其中包含有关不同种类鸟类的数据。 table 包含有关不同月份在公园中观察到不同物种的频率的信息。有些物种在某些月份未被观察到,但仅在 07-9-19
、08-10-19
和 05-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
。
我有一个 sql (Presto) table,其中包含有关不同种类鸟类的数据。 table 包含有关不同月份在公园中观察到不同物种的频率的信息。有些物种在某些月份未被观察到,但仅在 07-9-19
、08-10-19
和 05-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
。