【问题标题】:How to show incremental changes in SQL如何在 SQL 中显示增量更改
【发布时间】:2020-02-17 23:37:30
【问题描述】:

我有一个 sql (Presto) 表,其中包含有关不同种类鸟类的数据。该表包含有关不同月份在公园中观察到不同物种的频率的信息。有些物种在某些月份没有被观察到,但仅对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            ....            ....
....             ....            ....

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

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,但它相当复杂并且涉及到创建一个新表。我想知道我的问题是否有更简单的解决方案(因为它比链接中的问题稍微简单一些)。

【问题讨论】:

    标签: sql database presto


    【解决方案1】:

    您可以使用window function lag() 来恢复同一物种以前的 tco,按周期进行:

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

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

    【讨论】:

      猜你喜欢
      • 2020-02-19
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-22
      • 2019-01-31
      • 2020-09-24
      相关资源
      最近更新 更多