1

我有一个 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

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

4

1 回答 1

2

您可以使用UPDATE JOIN; a并且b是计算两者之间差异的两行,并且c被 LEFT 加入以确保aand之间没有行b

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

用于测试的 SQLfiddle

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

于 2013-03-11T11:59:26.093 回答