在MySQL中从另一行中减去一行

时间:2014-05-03 17:29:20

标签: mysql

我已经看过一些关于如何减去表中行的示例,例如: mysql subtract two rows from column and places into an alias

我见过的所有示例都基于具有某种唯一标识符的表格,该标识符在每一行上都会递增,就像ID列一样。

我有一个有日期和多个值的表。

我拥有的是:

  DATE            EU.1          
  2013-01-01      80 
  2013-01-08      82  
  2013-01-15      71

我想要的是:

  DATE            EU.1        Diff 
  2013-01-01      80          0
  2013-01-08      82          2
  2013-01-15      71         -10

最后,我想创建一个显示最近EU.1值与上一个日期之间价值差异的视图。

2 个答案:

答案 0 :(得分:1)

我喜欢为此目的使用相关子查询。在您的情况下,这将应用为:

select t.*,
       (`EU.1` - (select `EU.1`
                  from table t2
                  where t2.date < t.date
                  order by t2.date desc
                  limit 1
                 )
       ) as diff
from table t;

唯一的区别是第一个值是NULL而不是0 - 这对我来说更有意义。如果您需要0,请在整个表达式周围使用coalesce()

答案 1 :(得分:0)

您可以使用LEFT JOIN。对于每一行,通过确保它们之间没有行来找到前一行;然后只是减去。

SELECT c.date, c.eu1, COALESCE(c.eu1-a.eu1,0) diff
FROM mytable c
LEFT JOIN mytable a ON a.date < c.date
LEFT JOIN mytable b ON a.date < b.date AND b.date < c.date
WHERE b.date IS NULL;

An SQLfiddle to test with