1

日付、ソース、Facebookファンなどの数、および前日の変更を含む3番目の列を含むMySQLテーブルがあります。

テーブルは次のようになります。

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

ソースの2日間の差を計算するにはどうすればよいですか?

4

1 に答える 1

2

UPDATE JOIN;を使用してそれを行うことができます。abの差を計算するための2つの行であり、との間に行cがないことを確認するために左結合されます。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

テスト用のSQLfiddle

これによりテーブル内のデータが更新されることに注意してください。インターネット上のランダムな人からSQL更新を実行する前に、常にバックアップする必要があります:)

于 2013-03-11T11:59:26.093 に答える