powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Определение следующего рабочего дня
12 сообщений из 12, страница 1 из 1
Определение следующего рабочего дня
    #39559794
Askat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветсвую всех!

Есть таблица holiday, где заранее записаны не рабочие дни:

id | holidaysdate
==========================
1 25.11.2017
2 26.11.2017
3 02.12.2017
4 03.12.2017
.....
И т.д.

Подскажите пожалуйста, как определить следующий рабочий день?
...
Рейтинг: 0 / 0
Определение следующего рабочего дня
    #39559800
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Определение следующего рабочего дня
    #39559824
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
with holiday(h) as (select date '2017-11-28' from dual union all select date '2017-11-29' from dual union all select date '2017-12-01' from dual)
, data(d) as (select date '2017-11-27' from dual)
, hh as (
   select *
   from holiday
   match recognize (
      order by h
      measures final last(h)+1 as next_d
      all rows per match
      pattern (true ser*)
      define ser as ser.h = prev(ser.h) + 1
)  )
select d, nvl(next_d, d+1) next_d
from data
left join hh on d+1=h;
...
Рейтинг: 0 / 0
Определение следующего рабочего дня
    #39559829
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Askat,
Код: plsql
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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
SQL> ed
Wrote file afiedt.buf

  1  with calendar (id,dat) as (
  2  select 1, to_date('25.11.2017','dd.mm.yyyy') from dual union all
  3  select 2, to_date('26.11.2017','dd.mm.yyyy') from dual union all
  4  select 3, to_date('02.12.2017','dd.mm.yyyy') from dual union all
  5  select 4, to_date('03.12.2017','dd.mm.yyyy') from dual union all
  6  select 8, to_date('25.12.2017','dd.mm.yyyy') from dual
  7  )
  8  , t (d) as (
  9  select date '2017-11-20' d from dual
 10  union all
 11  select dat from t,calendar c where c.dat=t.d+1
 12  )
 13* select max(d)+1 d_work from t
SQL> /

D_WORK
--------
21.11.17

SQL> ed
Wrote file afiedt.buf

  1  with calendar (id,dat) as (
  2  select 1, to_date('25.11.2017','dd.mm.yyyy') from dual union all
  3  select 2, to_date('26.11.2017','dd.mm.yyyy') from dual union all
  4  select 3, to_date('02.12.2017','dd.mm.yyyy') from dual union all
  5  select 4, to_date('03.12.2017','dd.mm.yyyy') from dual union all
  6  select 8, to_date('25.12.2017','dd.mm.yyyy') from dual
  7  )
  8  , t (d) as (
  9  select date '2017-11-24' d from dual
 10  union all
 11  select dat from t,calendar c where c.dat=t.d+1
 12  )
 13* select max(d)+1 d_work from t
SQL> /

D_WORK
--------
27.11.17



......
stax
...
Рейтинг: 0 / 0
Определение следующего рабочего дня
    #39559850
Askat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
...
Рейтинг: 0 / 0
Определение следующего рабочего дня
    #39559851
Askat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quote Stax]Askat,
Код: plsql
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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
SQL> ed
Wrote file afiedt.buf

  1  with calendar (id,dat) as (
  2  select 1, to_date('25.11.2017','dd.mm.yyyy') from dual union all
  3  select 2, to_date('26.11.2017','dd.mm.yyyy') from dual union all
  4  select 3, to_date('02.12.2017','dd.mm.yyyy') from dual union all
  5  select 4, to_date('03.12.2017','dd.mm.yyyy') from dual union all
  6  select 8, to_date('25.12.2017','dd.mm.yyyy') from dual
  7  )
  8  , t (d) as (
  9  select date '2017-11-20' d from dual
 10  union all
 11  select dat from t,calendar c where c.dat=t.d+1
 12  )
 13* select max(d)+1 d_work from t
SQL> /

D_WORK
--------
21.11.17

SQL> ed
Wrote file afiedt.buf

  1  with calendar (id,dat) as (
  2  select 1, to_date('25.11.2017','dd.mm.yyyy') from dual union all
  3  select 2, to_date('26.11.2017','dd.mm.yyyy') from dual union all
  4  select 3, to_date('02.12.2017','dd.mm.yyyy') from dual union all
  5  select 4, to_date('03.12.2017','dd.mm.yyyy') from dual union all
  6  select 8, to_date('25.12.2017','dd.mm.yyyy') from dual
  7  )
  8  , t (d) as (
  9  select date '2017-11-24' d from dual
 10  union all
 11  select dat from t,calendar c where c.dat=t.d+1
 12  )
 13* select max(d)+1 d_work from t
SQL> /

D_WORK
--------
27.11.17




Даже если в таблице будут указаны 4 нерабочих дней то покажет пятый день?
...
Рейтинг: 0 / 0
Определение следующего рабочего дня
    #39559856
AskatДаже если...Еще и конфеты за тебя есть?
...
Рейтинг: 0 / 0
Определение следующего рабочего дня
    #39559870
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
  1  with calendar (id,dat) as (
  2  select 1, to_date('25.11.2017','dd.mm.yyyy') from dual union all
  3  select 2, to_date('26.11.2017','dd.mm.yyyy') from dual union all
  4  select 2, to_date('27.11.2017','dd.mm.yyyy') from dual union all
  5  select 2, to_date('28.11.2017','dd.mm.yyyy') from dual union all
  6  select 2, to_date('29.11.2017','dd.mm.yyyy') from dual union all
  7  select 3, to_date('02.12.2017','dd.mm.yyyy') from dual union all
  8  select 4, to_date('03.12.2017','dd.mm.yyyy') from dual union all
  9  select 8, to_date('25.12.2017','dd.mm.yyyy') from dual
 10  )
 11  , t (d) as (
 12  select date '2017-11-24' d from dual --текущий день
 13  union all
 14  select dat from t,calendar c where c.dat=t.d+1
 15  )
 16* select max(d)+1 d_work from t
SQL> /

D_WORK
--------
30.11.17




зы
можно через connect by но лень набирать, если надо нарисую
.....
stax
...
Рейтинг: 0 / 0
Определение следующего рабочего дня
    #39561153
Askat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тридевятый царьAskatДаже если...Еще и конфеты за тебя есть?

Конфеты есть ненадо лучше идеи подкидывай😉
...
Рейтинг: 0 / 0
Определение следующего рабочего дня
    #39561805
vladimir74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AskatЕсть таблица holiday, где заранее записаны не рабочие дни:
Для многих стран этих даных недостаточно. Для России напримр нужны ещё записи рабочих выходных дней
...
Рейтинг: 0 / 0
Определение следующего рабочего дня
    #39561884
vladimir74недостаточноЧтобы что-то не исключать, достаточно его не включать. Судя по приведенным исходным данным, а имено - обычно-выходные дни, табличка содержит полный набор выходных.
...
Рейтинг: 0 / 0
Определение следующего рабочего дня
    #39561959
vladimir74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обходимое недостаточноеvladimir74недостаточноЧтобы что-то не исключать, достаточно его не включать. Судя по приведенным исходным данным, а имено - обычно-выходные дни, табличка содержит полный набор выходных.
да, ты прав, я с утра о такой возможности даже не подумал.
Беру свои слова обратно.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Определение следующего рабочего дня
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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