我有下表结构和数据:
-----------------------------
| Date | Accu. Output |
-----------------------------
| 2017-01-01 | 150 |
| 2017-01-02 | 165 |
| 2017-01-03 | 182 |
| 2017-01-04 | 190 |
| 2017-01-05 | 210 |
-----------------------------
Run Code Online (Sandbox Code Playgroud)
我需要从上面的数据集生成下面的输出。我可以做客户端处理。但我正在尝试编写一个查询来获取此信息。
----------------------------------------------
| Date | Accu. Output | Daily Output |
----------------------------------------------
| 2017-01-05 | 210 | 20 |
| 2017-01-04 | 190 | 8 |
| 2017-01-03 | 182 | 17 |
| 2017-01-02 | 165 | 15 |
| 2017-01-01 | 150 | 0 |
----------------------------------------------
Run Code Online (Sandbox Code Playgroud)
每日输出是当前Accu 之间的差值。输出和前一天的 Accu。输出。
谢谢
这是一个使用左连接的方法:
select t.*,
coalesce(t.accu_output - tprev.accu_output, 0) as diff
from t left join
t tprev
on tprev.date = t.date - interval 1 day;
Run Code Online (Sandbox Code Playgroud)
这假设 - 就像在您的示例数据中一样 - 天数在增加,没有间隔并且每天只有一个值。您的问题(前一天的输出)暗示了这些条件。