powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вернуть ближайшее не пустое
5 сообщений из 5, страница 1 из 1
Вернуть ближайшее не пустое
    #40078362
Bereteli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Помогите решить пожалуйста задачку.
Есть таблица в которой fs - фешнсезон присваивается исходя из даты партии, но проблема заключается в том, что часть товара после инвентаризации возвращается уже в следующем сезоне, а должна иметь fs последней доступной партии от даты заведения.

Отсутствие поставщика и объявляет строки необходимые к перерасчету fs.
В моем случаи строки 2-5 должны иметь сезон FW-19-20, последняя строка SS-21.

Если с последним строкой я с легкостью справился с помощью LAG, то со строками 2-4 так не получается.
Пробовал и dense_rank , но столкнулся с тем, что не могу прописать 2 партиции первую для FW 19-20, вторую SS-21




Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
WITH TABLE1 AS (
SELECT 'УТ-00001078' Code,'2-1-71' Provider,'FW 19-20' FS,1 fs_id, 100 qty, 'FW 19-20' Result
UNION ALL SELECT 'УТ-00001078' Code,null Provider,'SS 20' FS,2 fs_id, 10 qty, 'FW 19-20' Result
UNION ALL SELECT 'УТ-00001078' Code,null Provider,'FW 20-21' FS,3 fs_id, 5 qty, 'FW 19-20' Result
UNION ALL SELECT 'УТ-00001078' Code,null Provider,'FW 20-21' FS,3 fs_id, 4 qty, 'FW 19-20' Result
UNION ALL SELECT 'УТ-00001078' Code,'2-1-72' Provider,'SS 21' FS,4 fs_id, 300 qty,'SS 21' Result
UNION ALL SELECT 'УТ-00001078' Code,'2-1-71' Provider,'SS 21' FS,4 fs_id, 200 qty,'SS 21' Result
UNION ALL SELECT 'УТ-00001078' Code,null Provider,'SS 21' FS,4 fs_id, 12 qty,'SS 21' Result)

SELECT * FROM TABLE1
...
Рейтинг: 0 / 0
Вернуть ближайшее не пустое
    #40078431
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bereteli
Если с последним строкой я с легкостью справился с помощью LAG, то со строками 2-4 так не получается.
у тебя нет поля, которое бы задавало порядок записей, так что пока ни с чем ты не "справился"
...
Рейтинг: 0 / 0
Вернуть ближайшее не пустое
    #40078455
Bereteli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court,

Вот поле, если есть возможность помочь буду благодарен. Так же у меня есть конкретные даты, если нужно денс ранк сделать как счет, или через row_number.
Но в целом я не знаю как это решить(

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
WITH TABLE1 AS (
SELECT 'УТ-00001078' Code,'2-1-71' Provider,'FW 19-20' FS,1 fs_id, 100 qty, 'FW 19-20' Result,'2020-01-01' date
UNION ALL SELECT 'УТ-00001078' Code,null Provider,'SS 20' FS,2 fs_id, 10 qty, 'FW 19-20' Result,'2020-01-02' date
UNION ALL SELECT 'УТ-00001078' Code,null Provider,'FW 20-21' FS,3 fs_id, 5 qty, 'FW 19-20' Result,'2020-01-03' date
UNION ALL SELECT 'УТ-00001078' Code,null Provider,'FW 20-21' FS,3 fs_id, 4 qty, 'FW 19-20' Result,'2020-01-04' date
UNION ALL SELECT 'УТ-00001078' Code,'2-1-72' Provider,'SS 21' FS,4 fs_id, 300 qty,'SS 21' Result,'2020-01-05' date
UNION ALL SELECT 'УТ-00001078' Code,'2-1-71' Provider,'SS 21' FS,4 fs_id, 200 qty,'SS 21' Result,'2020-01-06' date
UNION ALL SELECT 'УТ-00001078' Code,null Provider,'SS 21' FS,4 fs_id, 12 qty,'SS 21' Result,'2020-01-07' date)

SELECT *,dense_rank () OVER (partition BY Code  ORDER BY 	fs_id,provider DESC),
row_number () OVER (partition BY code ORDER BY fs_id,provider)
 FROM TABLE1
...
Рейтинг: 0 / 0
Вернуть ближайшее не пустое
    #40078463
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 WITH T AS (
SELECT 'УТ-00001078' Code,'2-1-71' Provider,'FW 19-20' FS,1 fs_id, 100 qty, 'FW 19-20' Result,'2020-01-01' date
UNION ALL SELECT 'УТ-00001078' Code,null Provider,'SS 20' FS,2 fs_id, 10 qty, 'FW 19-20' Result,'2020-01-02' date
UNION ALL SELECT 'УТ-00001078' Code,null Provider,'FW 20-21' FS,3 fs_id, 5 qty, 'FW 19-20' Result,'2020-01-03' date
UNION ALL SELECT 'УТ-00001078' Code,null Provider,'FW 20-21' FS,3 fs_id, 4 qty, 'FW 19-20' Result,'2020-01-04' date
UNION ALL SELECT 'УТ-00001078' Code,'2-1-72' Provider,'SS 21' FS,4 fs_id, 300 qty,'SS 21' Result,'2020-01-05' date
UNION ALL SELECT 'УТ-00001078' Code,'2-1-71' Provider,'SS 21' FS,4 fs_id, 200 qty,'SS 21' Result,'2020-01-06' date
UNION ALL SELECT 'УТ-00001078' Code,null Provider,'SS 21' FS,4 fs_id, 12 qty,'SS 21' Result,'2020-01-07' date)
select  newFS = T1.FS, T.*
  from T
       outer apply( select top(1) * 
                       from T as T1 
                       where T.Provider is null and T1.Provider is not null 
                            and T1.date < T.date and T1.Code = T.Code
                       order by T1.date desc
                  ) as T1
  order by date
...
Рейтинг: 0 / 0
Вернуть ближайшее не пустое
    #40078479
Bereteli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222,

Так и знал, что решение через outer apply. Начал читать про это и не мог понять как это связать.

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


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