2016-06-15 6 views
0

は、私は、MySQLで、次の表を持っている:MySQL - 各行とフィールドの違いを数える方法は?

Date | Item A | Item B | Item C | Item D 
------------------------------------------------ 
1/1/16 | 1  | 0  | 3  | 1 
1/2/16 | 3  | 3  | 4  | 0 
1/3/16 | 10  | 4  | 8  | 1 
1/4/16 | 5  | 3  | 8  | 3 

出力は前日に比べて各項目の値の違いからなる新しいテーブルでなければなりません。サンプル表の出力には、次の内容で新しい表のようになります。

Date | Item A | Item B | Item C | Item D 
------------------------------------------------ 
1/2/16 | 2  | 3  | 1  | -1 
1/3/16 | 7  | 1  | 4  | 1 
1/4/16 | -5  | -1  | 0  | 2 

私は単一のMySQLコマンドでこれを実現したいと思います。私は現在、次の行に沿って何かを持っています:

SELECT SUM(Item A) AS DIFF 
FROM my_table 
WHERE date = '1/1/16' 

私に "1"を出力します。しかし、これは私が探しているものに近いものではありません。

ありがとうございました。

+0

を私はしないでくださいあなたは単一のクエリでこれを行うことができると思います。 mysql手続きか、PHP /その他の言語のループ。テーブルを自分自身と結合することで2日間差分を得ることができます(date1で1回、date2で​​1回)。その後、すべての日に繰り返します。これで十分であれば、質問を回答として掲示することができます。 – Marki555

+0

まだ何か試しましたか?それ以外の場合は、前の行の結果を格納するためのユーザ定義変数を見てください:http://dev.mysql.com/doc/refman/5.7/en/user-variables.html – Johan

+0

@ Marki555 - 私と私はあなたのコード/答えに興味があります – domi771

答えて

0

同じテーブルの2行の差を計算するには、クエリ内の同じ行に2行の値を含めることができるように、テーブル自体をジョインする必要があります。

SELECT t1.ItemA, t2.ItemA, t1.ItemA-t2.ItemA AS DiffA, 
     t1.ItemB, t2.ItemB, t1.ItemB-t2.ItemB AS DiffB 
FROM my_table t1, my_table t2 
WHERE t1.date = '1/2/16' AND 
     t2.date = '1/1/16' 

注:ItemAの正確なフィールドタイプに応じて、あなたの代わりにこれを実行する必要があるかもしれません(それは私の場合には必要だった):それをテストするために

CAST(t1.ItemA AS signed) - CAST(t2.ItemA AS signed) AS DiffA

+0

明示的な結合を使用してください。1995年の結合では 'from'節を使用しないでください – Drew

関連する問題