我下面有一个类似的数据集:
结果列是该行的值列与当前行的上一行的值列之和。
是否可以为此结果编写查询?
答案 0 :(得分:0)
您没有使用特定的rdbms标记问题,但是大多数现代的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