我已经看过一些关于如何减去表中行的示例,例如: 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值与上一个日期之间价值差异的视图。
答案 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;