我有以下表结构和数据:
-----------------------------
| Date | Accu. Output |
-----------------------------
| 2017-01-01 | 150 |
| 2017-01-02 | 165 |
| 2017-01-03 | 182 |
| 2017-01-04 | 190 |
| 2017-01-05 | 210 |
-----------------------------
我需要从上面的数据集生成以下输出。我可以做客户端处理。但我正在尝试编写一个查询来获取此信息。
----------------------------------------------
| 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 |
----------------------------------------------
每日输出是当前Accu之间的差异。输出和前一天的Accu。输出
由于
答案 0 :(得分:4)
这是一种使用左连接的方法:
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;
这假设 - 与样本数据一样 - 日期增加,没有间隙,每天只有一个值。您的问题(前一天的输出)隐含了这些条件。