Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Прошу помощи новичку / 13 сообщений из 13, страница 1 из 1
02.02.2020, 18:35
    #39921492
Luna17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи новичку
Как добавить столбец, где будет ID следующего заказа?

Должно быть вот так, первые две колонки из старой таблицы, а создать нужно третий столбец.
...
Рейтинг: 0 / 0
02.02.2020, 19:41
    #39921507
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи новичку
Код: sql
1.
LEAD(OrderId) OVER (PARTITION BY CustomerId ORDER BY OrderId)
...
Рейтинг: 0 / 0
02.02.2020, 20:27
    #39921512
Luna17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи новичку
Akina,
большое спасибо!!!
...
Рейтинг: 0 / 0
02.02.2020, 20:31
    #39921513
Luna17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи новичку
Akina,
большое спасибо!!!
...
Рейтинг: 0 / 0
02.02.2020, 21:07
    #39921520
Luna17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи новичку
Akina, если не сложно, посмотрите, правильно ли я понимаю:
PARTITION BY указывает по какой колонке разделяем на группы, т.е. ищем в рамках одного Customer.
ORDER BY указывает на порядок, в котором будут обрабатываться OrderID. Так как здесь в порядке возрастания, то первое же значение, которое будет больше текущего будет записано? Или будет записан самый большой OrderID по клиенту?
...
Рейтинг: 0 / 0
02.02.2020, 21:17
    #39921523
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи новичку
Luna17
Так как здесь в порядке возрастания, то первое же значение, которое будет больше текущего будет записано? Или будет записан самый большой OrderID по клиенту?
Ни то, ни другое.

Partition определяет группу, к которой относится ТЕКУЩАЯ запись.
Order by определяет, как следует отсортировать записи (всей!) группы, к которой относится ТЕКУЩАЯ запись.
LEAD() возвращает значение, взятое из следующей записи для ТЕКУЩЕЙ записи (из её группы, в указанной сортировке).

Это выполняется для каждой записи выходного набора.
...
Рейтинг: 0 / 0
02.02.2020, 21:18
    #39921524
Luna17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи новичку
Akina, меня смущает LEAD, ведь мне нужен следующий ID, а не максимальный в группе. Может можно взять LAG, и тогда ORDER BY OrderID DESC?
...
Рейтинг: 0 / 0
02.02.2020, 21:21
    #39921526
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи новичку
Luna17
меня смущает LEAD, ведь мне нужен следующий ID, а не максимальный в группе.
Для получения максимального в группе использовался бы MAX(OrderId) OVER (PARTITION BY CustomerId ORDER BY OrderId) .
Luna17
Может можно взять LAG, и тогда ORDER BY OrderID DESC?

Да, LEAD(OrderId) OVER (PARTITION BY CustomerId ORDER BY OrderId) по результату эквивалентен LAG(OrderId) OVER (PARTITION BY CustomerId ORDER BY OrderId DESC) . Но последний - это почти наверняка плюс ещё одна сортировка.
...
Рейтинг: 0 / 0
02.02.2020, 21:23
    #39921527
Luna17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи новичку
Akina, ага вроде понятно, большое спасибо! А если в ID были бы буквы, ну в общем по ID нельзя сортировать. А у меня в старой таблице есть еще даты заказов, можно ли отсортировать по ним, но даты не выводить? вот так

select CustomerID,OrderID ,lead(OrderID) over (partition by CustomerID order by OrderDate)
from orders
...
Рейтинг: 0 / 0
02.02.2020, 21:30
    #39921529
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи новичку
Luna17
А если в ID были бы буквы, ну в общем по ID нельзя сортировать.
Цифры, буквы, смайлы... да хоть цирк с конями, какая разница? Должно быть поле (или комбинация полей), при сортировке по которому каждая запись - уникальна .
...
Рейтинг: 0 / 0
02.02.2020, 21:42
    #39921532
Luna17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи новичку
Akina,
изините за тупёж, пожалуйста, но не дошло
Если OrderID не будет уникальным по дате сортировать нельзя?
...
Рейтинг: 0 / 0
02.02.2020, 21:53
    #39921534
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи новичку
Luna17
Если OrderID не будет уникальным по дате сортировать нельзя?
Можно. Только результат будет недетерминированным - а нафига он такой кому нужен?
Вот, скажем, пример - простое добавление индекса изменяет результат. Это и есть следствие неуникальности использованного выражения сортировки.

А если там же сделать ORDER BY orderID, amount (бред, конечно, но на ПОКАЗАННЫХ данных это будет уникальная сортировка) - создание индекса не изменит результат.
...
Рейтинг: 0 / 0
02.02.2020, 22:14
    #39921541
Luna17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи новичку
Akina, большое-большое спасибо! Теперь ясно и есть где тренироваться
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Прошу помощи новичку / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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