powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Создание интервала для записи
5 сообщений из 5, страница 1 из 1
Создание интервала для записи
    #40083179
Navi030596
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.

Есть таблица шаблонов расписания.
Код: plsql
1.
2.
3.
4.
5.
6.
CREATE TABLE [dbo].[Template](
	[ID] [uniqueidentifier] NOT NULL,
	[Name] [nvarchar](50) NULL,
	[Interval] [nvarchar](50) NULL,-- интервал приема в минутах
	[Activate] [bit] NOT NULL,-- активен шаблон или нет
) ON [PRIMARY]


Следовательно активен шаблон в любой момент только один и для каждого шаблона имеется n-ое количество интервалов расписаний
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE TABLE [dbo].[Schedule](
	[ID] [uniqueidentifier] NOT NULL,
	[TemplateID] [uniqueidentifier] NULL,
	[StartTime] [nvarchar](50) NULL, --начало доступного времени для записи
	[EndTime] [nvarchar](50) NULL,--конец доступного времени для записи
	[Monday] [bit] NULL,-- True или false доступна ли запись в понедельник
	[Tuesday] [bit] NULL,
	[Wednesday] [bit] NULL,
	[Thursday] [bit] NULL,
	[Friday] [bit] NULL,
	[Saturday] [bit] NULL,
	[Sunday] [bit] NULL
) ON [PRIMARY]


Так же существует таблица в которой уже хранятся записи и занятое время.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE [dbo].[EventRecord](
	[ID] [uniqueidentifier] NOT NULL,
	[PeopleID] [uniqueidentifier] NULL,
	[TemplateID] [uniqueidentifier] NULL,
	[DateTime] [datetime] NULL,-- дата и время уже созданной записи
	[Interval] [nvarchar](max) NULL,
	[CheckOut] [bit] NULL,
	[Details] [nvarchar](max) NULL
) ON [PRIMARY]


Нужно составить хранимую процедуру (запрос), которая возвращала бы доступное время для записи (если возможно, то одним запросом) учитывая:
1. интервал приема
2. уже занятое время другими записями
3. дни недели.
Интервалы одного Schedule у меня построить получается, но как это сделать для всех Schedule одного шаблона и исключить уже то время на которое записались.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
declare @intervalMinutes int = 10
declare @myDates table (
startTime datetime,
endTime datetime
)

DECLARE @startTime DATETIME = '2016-07-10 08:00'
DECLARE @endTime DATETIME = '2016-07-10 22:00'

;WITH CTE AS
(
    SELECT  @startTime st
    UNION   ALL
    SELECT  dateadd(MINUTE,@intervalMinutes,st) st
    FROM    cte
    where   dateadd(MINUTE,@intervalMinutes,st) < @endTime
)
SELECT st,dateadd(MINUTE,@intervalMinutes,st) FROM cte
...
Рейтинг: 0 / 0
Создание интервала для записи
    #40083220
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Navi030596
Доброго времени суток.

Есть таблица шаблонов расписания.
Код: plsql
1.
2.
3.
CREATE TABLE [dbo].[Template](
	[Interval] [nvarchar](50) NULL,-- интервал приема в минутах
) ON [PRIMARY]



О чем тут вообще можно говорить?

По, собственно, проблеме:

1. Строим ВСЕ интервалы приема в табличку.
2. Отмечаем занятые. (Правильнее иметь отдельную табличку Занятых и связь между ВСЕ <-> Занятые. Тады при изменении расписаний "записанные страдальцы" не пропадут. )
3. Далее фсе просто - выбираем свободный из ВСЕ.
...
Рейтинг: 0 / 0
Создание интервала для записи
    #40083231
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поясню мысль коллеги aleks222
Речь идет о таблице "календарь" заполненой на годы вперед
любые попытки сгенерировать такую таблицу "на лету" на базе шаблонов (дней недели, праздников) и т.д. обречены на неудачу сложный, часто изменяемый код.
...
Рейтинг: 0 / 0
Создание интервала для записи
    #40084760
Navi030596
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222,программно я это уже сделал, вызывая более простые процедуры. Но думаю было бы неплохо эти интервалы создавать сразу на сервере.
...
Рейтинг: 0 / 0
Создание интервала для записи
    #40084772
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Navi030596
aleks222,программно я это уже сделал, вызывая более простые процедуры. Но думаю было бы неплохо эти интервалы создавать сразу на сервере.

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


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