2017-08-20 39 views
0

我有下面的表结构和数据:的MySQL获得运行差

----------------------------- 
| 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。输出。

感谢

+1

可能重复[计算SQL中两行之间的差异](https://stackoverflow.com/questions/32346589/calculate-the-differences-between-two-rows-in-sql) – Fruchtzwerg

+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; 

这是假设 - 在您的样本数据 - 这天都没有间隙和每天一个值增加。这些条件隐含在您的问题中(前一天的输出)。

+0

读过你的答案后,我认为可能会出现日期间有空隙的情况(但非常少见)。由于表中有一个自动递增列,所以我可以使用该列进行比较。 .ie'select t.id,t.logged_at,t.reading as accu_reading,(t.reading-t1.reading)as reads_tab t的差异t t.id = t1.id + 1中的reads_tab t1。 id desc;'[SQL小提琴](http://sqlfiddle.com/#!9/5c9058/15) –

+0

@LakmalPremaratne。 。 。我建议你问一个新问题,并提供适当的样本数据和描述要做什么。 –

+0

是的,我会问一个新问题。他们添加了另一个关键列。 –