SQL - 计算两行之间的差异并放入另一列

时间:2013-03-11 11:46:31

标签: mysql sql

我有一个MySQL表,其中包含日期,来源,例如Facebook粉丝和第三栏,其中应包含前一天的更改。

表格如下:

Date        |  Source  | fans | new fans
2013-02-02  | Facebook | 100  | -
2013-02-02  | Twitter  | 60   | -
2013-02-03  | Facebook | 120  | -
2013-02-03  | Twitter  | 62   | -
2013-02-04  | Twitter  | 65   | -
2013-02-04  | Facebook | 130  | -
2013-02-05  | Facebook | 145  | -
2013-02-05  | Twitter  | 70   | -

sql查询应将其转换为:

Date        |  Source  | fans | new fans
2013-02-02  | Facebook | 100  | - 
2013-02-02  | Twitter  | 60   | - 
2013-02-03  | Facebook | 120  | 20
2013-02-03  | Twitter  | 62   | 2 
2013-02-04  | Twitter  | 65   | 3 
2013-02-04  | Facebook | 130  | 10
2013-02-05  | Facebook | 145  | 15
2013-02-05  | Twitter  | 70   | 5

如何计算来源两天之间的差异?

1 个答案:

答案 0 :(得分:2)

你可以使用UPDATE JOIN来做到这一点; ab是计算两者之间差异的两行,c是LEFT加入以确保ab之间没有行。

UPDATE TableA AS a
JOIN TableA b 
  ON a.`Source` = b.`Source` AND a.`Date` > b.`Date`
LEFT JOIN TableA c
  ON a.`Source` = c.`Source` AND a.`Date` > c.`Date` AND c.`Date` > b.`Date`
SET a.`new fans` = a.`fans` - b.`fans`
WHERE c.`Date` IS NULL

An SQLfiddle for testing

请注意,这将更新您的表中的数据,并且您应该始终在从Internet上的随机用户运行SQL更新之前进行备份:)