Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос на получение непрерывных последовательностей / 12 сообщений из 12, страница 1 из 1
31.07.2018, 21:03
    #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
31.07.2018, 21:51
    #39681771
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на получение непрерывных последовательностей
Oleg-5551. Необходимо написать запрос, который покажет, сколько непрерывно дней у товарной позиции нет отгрузок со склада на каждую дату.Вы бы предоставили скрипт с тестовыми данными.
А то, во первых, как помогать вам сделать запрос, во вторых, непонятен признак "нет отгрузок" - это когда нет записей, или когда EndQnty не меняется?
...
Рейтинг: 0 / 0
31.07.2018, 21:59
    #39681773
mnbvcx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на получение непрерывных последовательностей
Oleg-555, это ведь известный класс задач, даже если в гугле вбить заголовок топика, то выходит статья на хабре.

"Задача поиска непрерывных последовательностей событий довольно легко решается с помощью SQL. Давайте уточним, что из себя представляют эти последовательности." ...
https://habr.com/post/270573/
...
Рейтинг: 0 / 0
31.07.2018, 22:04
    #39681775
mnbvcx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на получение непрерывных последовательностей
Oleg-555, тут больше разных реализаций, посмотри
https://habr.com/post/327862/
...
Рейтинг: 0 / 0
31.07.2018, 22:04
    #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
31.07.2018, 22:14
    #39681778
Oleg-555
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на получение непрерывных последовательностей
mnbvcx,
Я не совсем понимаю как это можно адаптировать под мою задачу и какой запрос более точно подойдет
...
Рейтинг: 0 / 0
01.08.2018, 05:57
    #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
01.08.2018, 09:52
    #39681863
Бабичев Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на получение непрерывных последовательностей
Kopelly,

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

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

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

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

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


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