powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Таблица-календарь праздничных дней
4 сообщений из 4, страница 1 из 1
Таблица-календарь праздничных дней
    #39647987
Guf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, есть вопрос по организации хранения рабочих / выходных / праздничных дней для разных стран / контрагентов.
Если модераторы считают, что вопрос больше относится к проектированию, пожалуйста, перенесите тему.

Принято правило, что пн-пт являются рабочими днями, а сб и вс - выходными. Все исключения из этого правила раз в год заносятся в таблицу исключений
для 2018 года
Код: 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.
CREATE TABLE [dbo].[calendar](
    [date]      DATE    NOT NULL
  , [include]   INT     NOT NULL
);
INSERT INTO [dbo].[calendar]([date], [include])
VALUES  ('20181231', 0)
      , ('20181229', 1)
      , ('20181105', 0)
      , ('20180612', 0)
      , ('20180611', 0)
      , ('20180609', 1)
      , ('20180509', 0)
      , ('20180502', 0)
      , ('20180501', 0)
      , ('20180430', 0)
      , ('20180428', 1)
      , ('20180309', 0)
      , ('20180308', 0)
      , ('20180223', 0)
      , ('20180108', 0)
      , ('20180105', 0)
      , ('20180104', 0)
      , ('20180103', 0)
      , ('20180102', 0)
      , ('20180101', 0)
;


include = 0 - не рабочий день
include = 1 - рабочий день


Теперь требуется обрабатывать графики работы для разных организаций. Например некоторые организации вполне могут работать 3, 4, 5 января, а у некоторых наоборот могут быт свои не рабочие дни (организации из других стран).

Пока в голове только дополнительная таблица, в которой будут храниться: дата, идентификатор организации, и признак рабочий день или нет. Т.о. нужно будет проверять для конкретной организации, в порядке убывания приоритета, наличие записи в этой дополнительной таблице, потом в основной, потом стандартное правило.

Поделитесь опытом / идеями, как лучше всего решить данную задачу.

Код: plaintext
1.
2.
Microsoft SQL Server 2008 R2 (SP3) - 10.50.6000.34 (X64)   Aug 19 2014 12:21:34   Copyright (c) Microsoft Corporation  Standard Edition (64-bit)
 on Windows NT 6.3 <X64> (Build 9600: ) 
...
Рейтинг: 0 / 0
Таблица-календарь праздничных дней
    #39648017
Alex1975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guf,

Делал аналогичную задачу.
В отдельную таблицу занес по контрагентам все нерабочие дни, включая сб и вс, т.к. бывает что и выходные рабочие по всяким праздникам.
Потом процедуру нарисовал отдачи календаря по каждому контрагенту.
CREATE TABLE [dbo].[market_no_work_date](
[mkt_id] [dbo].[refer] NOT NULL,
[no_work_date] [date] NOT NULL)


Create proc [dbo].[get_market_work_day]
(
@mkt_id refer
,@DateFrom date=null
,@DateTo date=null
)
as
Begin
Select @DateFrom=isnull(@DateFrom,getdate())
Select @DateTo=isnull(@DateTo,getdate())
;WITH
L0 AS (SELECT 0 AS c UNION ALL SELECT 0),
L1 AS (SELECT 0 AS c FROM L0 AS A CROSS JOIN L0 AS B),
L2 AS (SELECT 0 AS c FROM L1 AS A CROSS JOIN L1 AS B),
L3 AS (SELECT 0 AS c FROM L2 AS A CROSS JOIN L2 AS B),
L4 AS (SELECT 0 AS c FROM L3 AS A CROSS JOIN L3 AS B),
Nums AS (SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 0)) AS n FROM L4)
,dates as (SELECT cast(dateadd(dd,n-1,@DateFrom) as date) d FROM Nums)
,dates_row as (Select ROW_NUMBER() OVER(PARTITION BY mnwd.no_work_date ORDER BY mnwd.no_work_date) AS RowN,d.d,mnwd.no_work_date From dates d
left outer join market_no_work_date mnwd on d.d=mnwd.no_work_date and mnwd.mkt_id=@mkt_id)
Select d,case when no_work_date is null then 1 else 0 end as work_day from dates_row
Where d<=@DateTo
End
...
Рейтинг: 0 / 0
Таблица-календарь праздничных дней
    #39648511
iiyama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guf,
1. Вы удивитесь, но во многих странах выходные дни это пятница и суббота
2. Для этого придумали производственные календари
3. И да, на предприятии их может быть много.
...
Рейтинг: 0 / 0
Таблица-календарь праздничных дней
    #39649110
Guf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iiyama,

1. Удивился.
2. Именно его я и хочу сделать. (т.е. уже делаю по описанному в стартовом посте способу)
3. Именно в том и заключается вопрос, как люди делают несколько производственных календарей?
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Таблица-календарь праздничных дней
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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