首页 > 解决方案 > 如何在SQL中选择列的增量总和

问题描述

我有一个包含 GSP 位置的数据库。我想得到海拔高度的总和。

id  altitude
1   0
2   20            -> gained 20
3   10            -> gained 0
4   50            -> gained 40

此示例应输出 60 (20 + 40)。

标签: mysqlsql

解决方案


您可以使用lag()

select t.*,
       (case when lag(altitude) over (order by id) < altitude
             then altitude - lag(altitude) over (order by id)
             else 0
        end) as altitude_gain
from t

在许多数据库中,这可以简化为:

select t.*,
       greatest(altitude - lag(altitude) over (order by id), 0) as altitude_gain
from t;

推荐阅读