Как избавиться от дубликатов в Left Join?
У меня есть таблица RaspisanieZanyatij:
id KursNazvanie VremyaNachala
1 Matematica 1300000000
5 БазоваяИнформатика 1312345678
6 Биология 1318765432
4 География 1322222222
2 История 1300000000
3 Литература 1311111111
Я хочу вывести, чтобы значения шли таким образом:
1300000000 1311111111
1311111111 1312345678
1312345678 1318765432
1318765432 1322222222
1322222222 NULL
То есть я хочу вывести "значение - значение, немного большее"
Но мой код:
SELECT DISTINCT
--i1.id,
i1.VremyaNachala AS time,
i2.VremyaNachala AS greater_time
FROM
RaspisanieZanyatij AS i1
LEFT JOIN RaspisanieZanyatij AS i2 ON i2.VremyaNachala > i1.VremyaNachala
Выдаёт дубликаты:
1300000000 1311111111
1300000000 1312345678
1300000000 1318765432
1300000000 1322222222
1311111111 1312345678
1311111111 1318765432
1311111111 1322222222
1312345678 1318765432
1312345678 1322222222
1318765432 1322222222
1322222222 NULL
Как можно исправить код, чтобы убрать дубликаты слева и выводить лишь наименьшее большее справа ?
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
SELECT DISTINCT t1.VremyaNachala, t2.VremyaNachala
FROM RaspisanieZanyatij t1
LEFT JOIN RaspisanieZanyatij t2 ON t1.VremyaNachala < t2.VremyaNachala
WHERE NOT EXISTS ( SELECT NULL
FROM RaspisanieZanyatij t3
WHERE t1.VremyaNachala < t3.VremyaNachala
AND t3.VremyaNachala < t2.VremyaNachala )
или
SELECT t1.VremyaNachala, MIN(t2.VremyaNachala) VremyaNachala
FROM RaspisanieZanyatij t1
LEFT JOIN RaspisanieZanyatij t2 ON t1.VremyaNachala < t2.VremyaNachala
GROUP BY t1.VremyaNachala
и ещё куча вариантов...