Гость
Map
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как правильно применить LEAD ? / 7 сообщений из 7, страница 1 из 1
10.02.2022, 20:56
    #40133324
Morskoi_kotik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно применить LEAD ?
Подскажите, пожалуйста!

Есть таблица с множеством столбцов по изготовлению продукции


№ плана изготовления, дата плана изготовления, артикул продукции, цвет, цех, готовность, начальник цеха, тип продукции, и тд,

Мне нужно получить какая была следующая дата производства товара согласно артикулу. Например, товар с артикулом 345 был произведен 01.10.2021, а следующий план изготовления был 01.12.2021. В выводе должно быть: Товар - 345, Дата изготовления 1 - 01.10.2021, Дата изготовления 2 - 01.12.2021.

Но так как там еще много других параметров и строчка с одним и тем же артикулом может повторятся 5 раз (а в другом поле, например , будет 5 раз различный уникальный цвет), то я получаю: Товар - 345, Дата изготовления 1 - 01.10.2021, Дата изготовления 2 - 01.10.2021, Товар - 345, Дата изготовления 1 - 01.10.2021, Дата изготовления 2 - 01.10.2021, Товар - 345, Дата изготовления 1 - 01.10.2021, Дата изготовления 2 - 01.10.2021.... и т.д. Т.е. дата повторяется из следующей строки.

Как мне правильно применить функцию LEAD здесь? или можно как-то другим способом?
...
Рейтинг: 0 / 0
10.02.2022, 21:10
    #40133325
3unknown
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно применить LEAD ?
lead(Дата изготовления) over(partition by артикул order by Дата изготовления)
...
Рейтинг: 0 / 0
10.02.2022, 21:53
    #40133329
Morskoi_kotik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно применить LEAD ?
3unknown,

Не получается. Все равно сдвигает именно в рамках строки а не в рамках артикула((
...
Рейтинг: 0 / 0
10.02.2022, 22:26
    #40133333
SIMPLicity_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно применить LEAD ?
Morskoi_kotik
Подскажите, пожалуйста!

Есть таблица с множеством столбцов по изготовлению продукции


№ плана изготовления, дата плана изготовления, артикул продукции, цвет, цех, готовность, начальник цеха, тип продукции, и тд,

Мне нужно получить какая была следующая дата производства товара согласно артикулу. Например, товар с артикулом 345 был произведен 01.10.2021, а следующий план изготовления был 01.12.2021. В выводе должно быть: Товар - 345, Дата изготовления 1 - 01.10.2021, Дата изготовления 2 - 01.12.2021.

Но так как там еще много других параметров и строчка с одним и тем же артикулом может повторятся 5 раз (а в другом поле, например , будет 5 раз различный уникальный цвет), то я получаю: Товар - 345, Дата изготовления 1 - 01.10.2021, Дата изготовления 2 - 01.10.2021, Товар - 345, Дата изготовления 1 - 01.10.2021, Дата изготовления 2 - 01.10.2021, Товар - 345, Дата изготовления 1 - 01.10.2021, Дата изготовления 2 - 01.10.2021.... и т.д. Т.е. дата повторяется из следующей строки.

Как мне правильно применить функцию LEAD здесь? или можно как-то другим способом?


Очень странно, но зачем здесь LEAD вообще? Может быть выборка из таблицы в подзапрос с GROUP (или distinct),- с последующим сцеплением с собой же ?
...
Рейтинг: 0 / 0
10.02.2022, 22:32
    #40133334
3unknown
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно применить LEAD ?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
DROP TABLE IF EXISTS #data;
CREATE TABLE #data (
  Artikul int,
  [Manuf_date]  datetime,
  [colour] varchar(30),
  price float
)
;

insert #data
values(345,'20210501','Black',5.87),
(345,'20210501','White',5.87),
(345,'20210501','Blue',5.87),
(345,'20210501','Yellow',5.87),
(345,'20210503','Black',5.87),
(345,'20210503','White',5.87),
(345,'20210505','White',5.87),
(345,'20210505','Yellow',5.87)

;with a as(
select distinct Artikul,Manuf_date
from #data
),b as(
select*
,lead(Manuf_date) over(partition by Artikul order by Manuf_date) next_date
from a
)
select d.*,next_date
from #data d join b on d.Artikul = b.Artikul
and d.Manuf_date = b.Manuf_date
...
Рейтинг: 0 / 0
10.02.2022, 22:32
    #40133335
Morskoi_kotik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно применить LEAD ?
SIMPLicity_,

А можно пример? Че то не соображу
...
Рейтинг: 0 / 0
10.02.2022, 23:54
    #40133341
Morskoi_kotik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно применить LEAD ?
3unknown,

Спасибо, огромное! Применил данную конструкцию на своих данных - работает! (только у себя в конце на left join поменял).

(Все, теперь, наконец, могу идти спать. :)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как правильно применить LEAD ? / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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