Мне нужно сравнить данные за два разных дня в SQL. И мне действительно нужно это в одном запросе, так как мне нужно использовать результаты в разбиении на страницы. Проблема в том, что когда я выполняю самосоединение, это приводит к дублированию столбцов, поскольку INNER JOIN
является декартовым произведением.
Вот код скрипта sql
E.g.
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'
)
Два вопроса:
- Как мне переписать, чтобы получить одну строку на JOIN по качеству?
- Будет ли он по-прежнему работать, если в одном из дней отсутствует какая-то соответствующая строка (по качеству)?
ИЗМЕНИТЬ
Вот ввод:
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
Объяснение:
Каждая дата содержит уникальные значения. Таким образом, мы видим только качество А и В. Для Б- есть подходящее Б на другую дату. Для А - нет. Следовательно, разница для B равна 2 (более высокая дата минус более низкая). Разница для A равна 0, потому что не из чего вычитать.