以下是我正在寻找的一个例子:
我的数据是以加仑为单位的终身总数。我希望能够在我选择的时间段内将数据显示为运行总计,而不是作为终身总计。例如:
timestamp lifetimeTotal runningTotal
1:30 3000 0
1:31 3001 1
1:32 3005 5
1:33 3010 10
我不确定该怎么做。我正在使用over
查看this one等示例,但它并不是我所寻找的:我不想每次都将这些行添加到一起,而是我想添加两行之间的差异。现在我只是选择终身总数并显示它。
有什么想法吗?我会在必要时添加代码,但除了我的select语句之外没有太多要显示的内容;我无法从概念上想办法做到这一点。
答案 0 :(得分:2)
这可以使用窗口函数轻松完成:
SELECT [timestamp], lifetimeTotal,
COALESCE(SUM(diff) OVER (ORDER BY [timestamp]), 0) AS runningTotal
FROM (
SELECT [timestamp],
lifetimeTotal,
lifetimeTotal - LAG(lifetimeTotal) OVER (ORDER BY [timestamp]) AS diff
FROM mytable ) t
上述查询使用LAG
来计算当前行与上一行之间的差异。然后在外部查询中使用SUM OVER
来计算差异的运行总计。
答案 1 :(得分:2)
这应该给出当前的lifetimeTotal和min lifetimeTotal
之间的差异SELECT timestamp,
lifetimeTotal,
lifetimeTotal - MIN(lifetimeTotal) OVER () as runningTotal
FROM Table