powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос на получение непрерывных последовательностей
12 сообщений из 12, страница 1 из 1
Запрос на получение непрерывных последовательностей
    #39681757
Oleg-555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ID integer Идентификатор записи
DayID date Дата
ArtID integer Идентификатор товарной позиции
CntrID integer Идентификатор контрагента склада
EndQnty decimal(16, 3) Остаток на складе
1. Необходимо написать запрос, который покажет, сколько непрерывно дней у товарной позиции нет отгрузок со склада на каждую дату.
Источник данных:
• dbo.tTestTable1
Вывести следующие поля:
• Дата
• Идентификатор контрагента склада
• Идентификатор товарной позиции
• Остаток на складе
• Количество дней без отгрузок

Подскажите как можно реализовать данный запрос, единственное до чего додумался
select ArtID , abs (DATEDIFF(day,max(DayID),min(DayID))) from Table_1 group by ArtID
но этого не достаточно
...
Рейтинг: 0 / 0
Запрос на получение непрерывных последовательностей
    #39681771
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg-5551. Необходимо написать запрос, который покажет, сколько непрерывно дней у товарной позиции нет отгрузок со склада на каждую дату.Вы бы предоставили скрипт с тестовыми данными.
А то, во первых, как помогать вам сделать запрос, во вторых, непонятен признак "нет отгрузок" - это когда нет записей, или когда EndQnty не меняется?
...
Рейтинг: 0 / 0
Запрос на получение непрерывных последовательностей
    #39681773
mnbvcx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg-555, это ведь известный класс задач, даже если в гугле вбить заголовок топика, то выходит статья на хабре.

"Задача поиска непрерывных последовательностей событий довольно легко решается с помощью SQL. Давайте уточним, что из себя представляют эти последовательности." ...
https://habr.com/post/270573/
...
Рейтинг: 0 / 0
Запрос на получение непрерывных последовательностей
    #39681775
mnbvcx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg-555, тут больше разных реализаций, посмотри
https://habr.com/post/327862/
...
Рейтинг: 0 / 0
Запрос на получение непрерывных последовательностей
    #39681776
Oleg-555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,
В таблице содержится информация по товарным позициям, по которым отсутствуют отгрузки со склада.
1 2018-07-31 88 7 10,000
2 2018-07-30 88 8 15,000
3 2018-07-30 88 8 20,000
4 2018-07-30 99 9 22,000
5 2018-07-29 55 5 5,000
6 2018-07-29 88 8 5,000
это тд
...
Рейтинг: 0 / 0
Запрос на получение непрерывных последовательностей
    #39681778
Oleg-555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mnbvcx,
Я не совсем понимаю как это можно адаптировать под мою задачу и какой запрос более точно подойдет
...
Рейтинг: 0 / 0
Запрос на получение непрерывных последовательностей
    #39681818
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
declare @tTestTable1 table (
ID integer,
DayID date,
ArtID integer,
CntrID integer,
EndQnty decimal(16, 3)
)

Insert into @tTestTable1 values 
(1, '2018-07-29', 88, 8, 5.000),
(2, '2018-07-29', 55, 5, 5.000),
(3, '2018-07-30', 99, 9, 22.000),
(4, '2018-07-30', 88, 8, 20.000),
(5, '2018-07-30', 88, 8, 15.000),
(6, '2018-07-31', 88, 7, 10.000);

With Sales as
(Select *,case When lag(EndQnty) over (Partition by ArtID Order by DayID, ID) <= EndQnty Then 0 else 1 End as IsSale From @tTestTable1),
Groups as 
(Select *,sum(IsSale) Over (Partition by ArtID Order by DayID, ID) as Grp From Sales)

Select ID,DayID,ArtID,CntrID,EndQnty,
DATEDIFF(d,
isnull(min(DayID) over (Partition by ArtID,Grp Order by DayID, ID Rows between UNBOUNDED PRECEDING and 1 PRECEDING),--Ищем начало цепочки непродаж среди предыдущих значений
       lag(DayID) over (Partition by ArtID,IsSale Order by grp)),--Если не нашли, значит это и есть начало цепочки, поэтому берем дату предыдущей продажи
DayID) as DaysPrevSales
 From Groups
Order by ArtID,DayID,id



Если надо в считать в разрезе складов - добавить в каждый "Partition By" поле "CntrID"
...
Рейтинг: 0 / 0
Запрос на получение непрерывных последовательностей
    #39681863
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kopelly,

я помню, что место твоей работы - секрет.
но, возможно, "не секрет" хотя бы стэк используемых у вас на работе технологий?

Если не хочешь отвечать публично, может напишешь "приватно", на мыло?
bsm<тут должна быть собака>au<я тут - точка>ru

З.Ы.
2 модераторы...
сорри за злостный оффтоп :)
...
Рейтинг: 0 / 0
Запрос на получение непрерывных последовательностей
    #39681872
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только с запросами SQL и работаю (ну и разве что отчеты в Report Builder)...
Ни обслуживанием сервера, ни написанием прикладного ПО не занимаюсь...
...
Рейтинг: 0 / 0
Запрос на получение непрерывных последовательностей
    #39681875
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kopelly,

Спасибо за ответ! :)
...
Рейтинг: 0 / 0
Запрос на получение непрерывных последовательностей
    #39682242
Oleg-555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kopelly,
Спасибо вам большое, у меня заработало))
А с какой стороны можно подойти лучше что бы решить такую задачу

Посчитать разницу остатка первого дня непрерывной последовательности отсутствия отгрузок у товарной позиции и датой.
Источник данных:
* dbo.tTestTable1
Вывести следующие поля:
Дата
Идентификатор контрагента склада
Идентификатор товарной позиции
Остаток на складе
Количество дней без отгрузок
Разница остатка
Я пытаюсь модернизировать не пойму что менять нужно.....
...
Рейтинг: 0 / 0
Запрос на получение непрерывных последовательностей
    #39682304
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg-555Посчитать разницу остатка первого дня непрерывной последовательности отсутствия отгрузок у товарной позиции и датой. first_value() over(partition by ...)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос на получение непрерывных последовательностей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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