SQL-如何只对上面的一行求和

时间:2019-06-04 05:26:34

标签: sql rdbms

我下面有一个类似的数据集:

the result column is the sum value of only one row above the current row

结果列是该行的值列与当前行的上一行的值列之和。

是否可以为此结果编写查询?

3 个答案:

答案 0 :(得分:0)

您没有使用特定的标记问题,但是大多数现代的RDBMS支持lag窗口功能:

SELECT value + COALESCE(LAG(value) OVER (ORDER BY id), 0) AS result
FROM   mytable

答案 1 :(得分:0)

如果您的数据库不支持LAG,那么我们还有其他一些选择。在MySQL中,我们可以尝试使用相关的子查询来查找滞后值:

SELECT
    id,
    value,
    COALESCE((SELECT t2.value FROM yourTable t2
     WHERE t2.id < t1.id ORDER BY t2.id DESC LIMIT 1), 0) result
FROM yourTable t1;

使用子查询中的TOP 1在SQL Server上也可以使用类似的查询。

答案 2 :(得分:0)

您可以按以下方式使用<input type="text" <?php if(isset($_POST['user_name'])) echo "value=".$_POST['user_name']) ?> name="user_name" id="user_name">

lag()

如果您想为第一行提供一个值,则可以将select t.*, (value + lag(value) over (order by id)) as result from t; 与windowing子句一起使用:

sum()

这很容易推广到更多行。

或者,如果select t.*, sum(t.value) over (order by t.id rows between 1 preceding and current row) as result from t; 之间没有空格,则可以使用id

join