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

date type_day is_workday next_work_day2007-01-09 Рабочий 1 ?2007-01-10 Рабочий 1?2007-01-11 Рабочий 1?2007-01-12 Рабочий 1?2007-01-13 Выходной 0?2007-01-14 Выходной 0?2007-01-15 Рабочий 1?2007-01-16 Рабочий 1?2007-01-17 Рабочий 1?2007-01-18 Рабочий 1?2007-01-19 Рабочий 1?2007-01-20 Выходной 0?2007-01-21 Выходной 0?

Как вывести колонку в которой будет указан следующий рабочий день?
...
Рейтинг: 0 / 0
Определение следующей рабочей даты в производственном календаре
    #40088061
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вывести не проблема. Outer apply учи.
Вопрос: занафига?
...
Рейтинг: 0 / 0
Определение следующей рабочей даты в производственном календаре
    #40088071
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чтобы вот прямо сейчас не учить "Outer apply" можно так:
Код: 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.
WITH A(dt, r) as (  --исходные данные
  select '20070109', 1 union all
  select '20070110', 1 union all
  select '20070111', 1 union all
  select '20070112', 1 union all
  select '20070113', 0 union all
  select '20070114', 0 union all
  select '20070115', 1 union all
  select '20070116', 1 union all
  select '20070117', 1 union all
  select '20070118', 1 union all
  select '20070119', 1 union all
  select '20070120', 0 union all
  select '20070121', 0 --union all
)
, B as ( -- находим следующий рабочий день
  select dt, Lead(dt, 1, '99990101') over (order by dt) as dtf
    from A
   where r =1
)

select a.dt, a.r, dtf  -- формируем нужную таблицу
  from      A a
  left join B b on b.dt=a.dt


Результат:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
dt		r	dtf
20070109	1	20070110
20070110	1	20070111
20070111	1	20070112
20070112	1	20070115
20070113	0	NULL
20070114	0	NULL
20070115	1	20070116
20070116	1	20070117
20070117	1	20070118
20070118	1	20070119
20070119	1	99990101
20070120	0	NULL
20070121	0	NULL
...
Рейтинг: 0 / 0
Определение следующей рабочей даты в производственном календаре
    #40088073
Dyroff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222,

Ну, для меня и моего уровня знаний оказалось- проблема))
Нафига?- есть дата, прибавляю к ней 1 календарный день, получившаяся дата попадает, например, на праздник, а мне нужно знать, какая следующая дата будет рабочим днем.
Ну например:
Заказ размещен 31 декабря, по регламенту его надо выполнять на следующий рабочий день и вот тут мне надо узнать дату, в которую необходимо выполнить заказ.
И вот пока не могу)
...
Рейтинг: 0 / 0
Определение следующей рабочей даты в производственном календаре
    #40088074
Dyroff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Wlr-l,
Спасибо большое, я попробую
Подскажите, а почему для 20070113 и 20070114 нет следующего раб дня?
...
Рейтинг: 0 / 0
Определение следующей рабочей даты в производственном календаре
    #40088077
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dyroff есть дата, прибавляю к ней 1 календарный день, получившаяся дата попадает, например, на праздник, а мне нужно знать, какая следующая дата будет рабочим днем.в лоб
Код: sql
1.
select top 1 * from cal where is_workday=1 and [date]>'есть дата' order by [date]
...
Рейтинг: 0 / 0
Определение следующей рабочей даты в производственном календаре
    #40088078
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dyroff
Wlr-l,
Спасибо большое, я попробую
Подскажите, а почему для 20070113 и 20070114 нет следующего раб дня?

Правильно надо формулировать тех.задание.
Учись.
Как исполнитель понял - так и сделал.
...
Рейтинг: 0 / 0
Определение следующей рабочей даты в производственном календаре
    #40088079
Dyroff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG1257,

Круто! Спасибо
...
Рейтинг: 0 / 0
Определение следующей рабочей даты в производственном календаре
    #40088080
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dyroff
Wlr-l,
Спасибо большое, я попробую
Подскажите, а почему для 20070113 и 20070114 нет следующего раб дня?


Если выходной день, то какой смысл для него искать следующий рабочий день?
...
Рейтинг: 0 / 0
Определение следующей рабочей даты в производственном календаре
    #40088082
Dyroff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Wlr-l,

Ну смотрите, надо определить дату, в которую должен быть планово выполнен заказ.
По правилу эьо должно быть на след раб день.
И я хочу создать кононку, в которой всегда рядом с датой заказа будет выведена дата, в которую его нужно выполнить. И вот мне нужно так, чтобы там никогда не оказался праздничный или выходной, то есть, дата, которая больше даты заказа, но у которой is_work_day=1.
То есть в столбце всегда должна быть дата
...
Рейтинг: 0 / 0
Определение следующей рабочей даты в производственном календаре
    #40088085
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dyroff,

Вам уже подсказали три варианта решения вашей задачи. Теперь дело за вами.
...
Рейтинг: 0 / 0
Определение следующей рабочей даты в производственном календаре
    #40088116
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wlr-l
Dyroff,

Вам уже подсказали три варианта решения вашей задачи. Теперь дело за вами.

Не, ну если "решать" - это думать надо.
Самое эффективное тупо и прямолинейно ПРОНУМЕРОВАТЬ рабочие дни в календаре.
Тогда все сводится к банальному JOIN.
...
Рейтинг: 0 / 0
Определение следующей рабочей даты в производственном календаре
    #40088122
Dyroff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Wlr-l
Dyroff,

Вам уже подсказали три варианта решения вашей задачи. Теперь дело за вами.


Так а я разве говорю что я неудовлетворен решением? Я просто отвечал на вопрос заданный мне "Какой смысл так делать"

Предложенных решений и информации вполне достаточно
...
Рейтинг: 0 / 0
Определение следующей рабочей даты в производственном календаре
    #40088169
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222
Wlr-l
Dyroff,

Вам уже подсказали три варианта решения вашей задачи. Теперь дело за вами.

Не, ну если "решать" - это думать надо.
Самое эффективное тупо и прямолинейно ПРОНУМЕРОВАТЬ рабочие дни в календаре.
Тогда все сводится к банальному JOIN.


Это уже было:

Считаем рабочие дни

https://www.sql.ru/blogs/decolores/212
...
Рейтинг: 0 / 0
Определение следующей рабочей даты в производственном календаре
    #40088190
Dyroff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Wlr-l,

Спасибо за ссылку. Пойду изучать
...
Рейтинг: 0 / 0
Определение следующей рабочей даты в производственном календаре
    #40088428
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
WITH A(dt, r) as (  --исходные данные
  select '20070109', 1 union all
  select '20070110', 1 union all
  select '20070111', 1 union all
  select '20070112', 1 union all
  select '20070113', 0 union all
  select '20070114', 0 union all
  select '20070115', 1 union all
  select '20070116', 1 union all
  select '20070117', 1 union all
  select '20070118', 1 union all
  select '20070119', 1 union all
  select '20070120', 0 union all
  select '20070121', 0 --union all
)
select a.dt, a.r,  min(case r when 0 then null else a.dt end) over (order by a.dt ROWS BETWEEN  1 FOLLOWING  and UNBOUNDED FOLLOWING ) as dtf
  from      A a
  order by a.dt
...
Рейтинг: 0 / 0
Определение следующей рабочей даты в производственном календаре
    #40088434
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dyroff,

авторпо регламенту его надо выполнять на следующий рабочий день и вот тут мне надо узнать дату, в которую необходимо выполнить заказ

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


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