SQL で2 つの異なる日のデータを比較する必要があります。ページネーションで結果を使用する必要があるため、単一のクエリでそれが本当に必要です。問題は、自己結合を行うと、デカルト積であるため列が重複することです。INNER JOIN
SQLフィドルのコードは次のとおりです
例えば
SELECT * FROM `my_table` as t1
INNER JOIN my_table t2 ON t1.quality = t2.quality
WHERE (
t1.day = '2015-01-08' OR t1.day = '2015-01-09' OR
t2.day = '2015-01-08' OR t2.day = '2015-01-09'
)
2 つの質問:
- 品質の JOIN ごとに 1 つの行を取得するように書き直すにはどうすればよいですか?
- 対応する行 (品質に関する行) がいずれかの日から欠落している場合でも機能しますか?
編集
入力は次のとおりです。
INSERT INTO my_table
(quality, quantity, day)
VALUES
('A', 1, '2015-01-15'),
('B', 2, '2015-01-15'),
('B', 0, '2015-01-10');
そして、望ましい出力は次のとおりです。
QUALITY | QUANTITY | T1.QUANTITY - T2.QUANTITY
A 1 0 (or NULL?)
B 2 2
説明:
各日付には固有の値があります。したがって、A 品質と B 品質のみが表示されます。B については、別の日に適切な B がいます。Aの場合 - ありません。したがって、B の差は 2 (高い日付から低い日付を引いたもの) です。差し引くものがないため、A の差は 0 です。