powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Джойн со смещением
4 сообщений из 4, страница 1 из 1
Джойн со смещением
    #40093236
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Требуется сделать соединение таблиц, где в каждой строке будет указана карточка груза, время выгрузки и время следующей выгрузки.

№ карточки Время выгрузки Время следующей выгрузки
1 01.07.2021 05.07.2021
1 05.07.2021 10.07.2021
1 10.07.2021 18.07.2021
1 18.07.2021 Null


Реализовано следующим образом

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT cc.id, cr.remains_time, 

           (SELECT MIN(cr2.remains_time)
	     FROM cargo_remains cr2 
	     WHERE cr2.cargo_card_id = cr.cargo_card_id 
	     AND cr2.remains_time > cr.remains_time) AS remains_time_next

FROM cargo_card cc 
INNER JOIN cargo_remains cr ON cr.cargo_card_id = cc.id



Но вложенный запрос сильно замедляет выполнение запроса. Можно ли как-то сделать это плоским запросом?
...
Рейтинг: 0 / 0
Джойн со смещением
    #40093238
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
SELECT cc.id,
       cr.remains_time,
       LEAD(cr.remains_time) OVER (PARTITION BY cc.id
                                   ORDER BY cr.remains_time) remains_time_next
FROM cargo_card cc 
INNER JOIN cargo_remains cr ON cr.cargo_card_id = cc.id
...
Рейтинг: 0 / 0
Джойн со смещением
    #40097199
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Код: sql
1.
2.
3.
4.
5.
6.
SELECT cc.id,
       cr.remains_time,
       LEAD(cr.remains_time) OVER (PARTITION BY cc.id
                                   ORDER BY cr.remains_time) remains_time_next
FROM cargo_card cc 
INNER JOIN cargo_remains cr ON cr.cargo_card_id = cc.id


Выдает ошибку:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(PARTITION BY cc.id ORDER BY cr.remains_time) remains_time_next
FROM cargo_card' at line 3

А сам менеджер MySQL подсказывает вместо LEAD - LEADING, вместо OVER - OVERLAPS
...
Рейтинг: 0 / 0
Джойн со смещением
    #40097235
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Она оказывается с 8 версии работает. А там 5-я.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Джойн со смещением
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]