У меня есть таблица @course_schedule, в которой указаны все название курса и расписание занятий.
Есть 2 родительских курса и все остальные курсы, которые имеют некоторые изменения в расписании.
Курсы для родителей являются базовым курсом, и занятия проводятся ежедневно, кроме выходных и праздничных дней.
Все действительные даты класса для родителя находятся в таблице @parent_course_dates, в шаблоне праздничных дней могут быть некоторые изменения
поэтому фиксируются действительные даты обоих родительских курсов.
Есть еще одна таблица @alldates, в которой данные о датах записываются с именем дня.
Я хочу создать логику, которая будет генерировать
lecture_dates
lab_dates
doubt_session_date
Any_other_date
Согласно описанию, указанному в таблице @course_schedule для каждого типа даты. Даты будут следовать расписанию родительского курса
для всех графиков дней недели (понедельник-пятница) и таблицы @all_dates для любых дат выходного дня (суббота).
Если какой-либо день недели (понедельник-пятница) недоступен в таблице @parent_course_dates, это означает, что этот день будет выходным и не должен быть
рассматривается для класса в этом случае следующая или предыдущая дата должна быть выбрана на основе описания, т.е. если описание
Понедельник после третьего четверга, а понедельник - выходной, тогда следует выбирать вторник, если вторник снова выходной
Среда должна быть выбрана.
В случае определения, такого как среда перед третьим четвергом, а среда - выходной день, следует выбирать вторник.
В случае субботы не должно быть никакого влияния праздника.
Ниже приведены примеры данных.
declare @course_schedule table (id int, course_name varchar(100), parent_course_id int, course_type char(5),
lecture_schedule_desc varchar(500), lab_schedule_desc varchar(500),doubts_session_desc varchar(100),
active_in_months varchar(100) )
declare @parent_course_dates table (id int identity, course_id int , valid_date int )
declare @alldates table (valid_date int,[dayname] varchar(100))
insert into @course_schedule
values(101, 'dax_course', 1, 'c1','Monday after third thursday of month in active_in_months'
,'wednesday before third thursday of month in active_in_months' ,'saturday after second friday of month in active_in_months' ,'1,2,3')
insert into @course_schedule
values(111, 'dax2_course', 1, 'c1','Tuesday after second thursday of month in active_in_months'
,'monday after third friday of month in active_in_months' ,'Friday after second monday of month in active_in_months' ,'3,4')
insert into @course_schedule
values(201, 'ml_course', 35, 'c1','Monday after third thursday of month in active_in_months'
,'wednesday before third thursday of month in active_in_months' ,'saturday after second monday of month in active_in_months' ,'1,2')
insert into @parent_course_dates values('1 ','20190102')
insert into @parent_course_dates values('1 ','20190103')
insert into @parent_course_dates values('1 ','20190104')
insert into @parent_course_dates values('1 ','20190107')
insert into @parent_course_dates values('1 ','20190108')
insert into @parent_course_dates values('1 ','20190109')
insert into @parent_course_dates values('1 ','20190110')
insert into @parent_course_dates values('1 ','20190111')
insert into @parent_course_dates values('1 ','20190114')
insert into @parent_course_dates values('1 ','20190115')
insert into @parent_course_dates values('1 ','20190116')
insert into @parent_course_dates values('1 ','20190117')
insert into @parent_course_dates values('1 ','20190118')
insert into @parent_course_dates values('1 ','20190121')
insert into @parent_course_dates values('1 ','20190122')
insert into @parent_course_dates values('1 ','20190123')
insert into @parent_course_dates values('1 ','20190124')
insert into @parent_course_dates values('1 ','20190125')
insert into @parent_course_dates values('1 ','20190128')
insert into @parent_course_dates values('1 ','20190129')
insert into @parent_course_dates values('1 ','20190130')
insert into @parent_course_dates values('1 ','20190131')
insert into @parent_course_dates values('1 ','20190201')
insert into @parent_course_dates values('1 ','20190204')
insert into @parent_course_dates values('1 ','20190205')
insert into @parent_course_dates values('1 ','20190206')
insert into @parent_course_dates values('1 ','20190207')
insert into @parent_course_dates values('1 ','20190208')
insert into @parent_course_dates values('1 ','20190211')
insert into @parent_course_dates values('1 ','20190212')
insert into @parent_course_dates values('1 ','20190213')
insert into @parent_course_dates values('1 ','20190214')
insert into @parent_course_dates values('1 ','20190215')
insert into @parent_course_dates values('1 ','20190218')
insert into @parent_course_dates values('1 ','20190219')
insert into @parent_course_dates values('1 ','20190220')
insert into @parent_course_dates values('1 ','20190221')
insert into @parent_course_dates values('1 ','20190222')
insert into @parent_course_dates values('1 ','20190225')
insert into @parent_course_dates values('1 ','20190226')
insert into @parent_course_dates values('1 ','20190227')
insert into @parent_course_dates values('1 ','20190228')
insert into @parent_course_dates values('1 ','20190301')
insert into @parent_course_dates values('1 ','20190304')
insert into @parent_course_dates values('1 ','20190305')
insert into @parent_course_dates values('1 ','20190306')
insert into @parent_course_dates values('1 ','20190307')
insert into @parent_course_dates values('1 ','20190308')
insert into @parent_course_dates values('1 ','20190311')
insert into @parent_course_dates values('1 ','20190312')
insert into @parent_course_dates values('1 ','20190313')
insert into @parent_course_dates values('1 ','20190314')
insert into @parent_course_dates values('1 ','20190315')
insert into @parent_course_dates values('1 ','20190318')
insert into @parent_course_dates values('1 ','20190319')
insert into @parent_course_dates values('1 ','20190320')
insert into @parent_course_dates values('1 ','20190321')
insert into @parent_course_dates values('1 ','20190322')
insert into @parent_course_dates values('1 ','20190325')
insert into @parent_course_dates values('1 ','20190326')
insert into @parent_course_dates values('1 ','20190327')
insert into @parent_course_dates values('1 ','20190328')
insert into @parent_course_dates values('1 ','20190329')
insert into @parent_course_dates values('1 ','20190401')
insert into @parent_course_dates values('1 ','20190402')
insert into @parent_course_dates values('1 ','20190403')
insert into @parent_course_dates values('1 ','20190404')
insert into @parent_course_dates values('1 ','20190405')
insert into @parent_course_dates values('1 ','20190408')
insert into @parent_course_dates values('1 ','20190409')
insert into @parent_course_dates values('1 ','20190410')
insert into @parent_course_dates values('1 ','20190411')
insert into @parent_course_dates values('1 ','20190412')
insert into @parent_course_dates values('1 ','20190415')
insert into @parent_course_dates values('1 ','20190416')
insert into @parent_course_dates values('1 ','20190417')
insert into @parent_course_dates values('1 ','20190418')
insert into @parent_course_dates values('1 ','20190423')
insert into @parent_course_dates values('1 ','20190424')
insert into @parent_course_dates values('1 ','20190425')
insert into @parent_course_dates values('1 ','20190426')
insert into @parent_course_dates values('1 ','20190429')
insert into @parent_course_dates values('1 ','20190430')
insert into @parent_course_dates values('1 ','20191231')
insert into @parent_course_dates values('35','20190102')
insert into @parent_course_dates values('35','20190103')
insert into @parent_course_dates values('35','20190104')
insert into @parent_course_dates values('35','20190107')
insert into @parent_course_dates values('35','20190108')
insert into @parent_course_dates values('35','20190109')
insert into @parent_course_dates values('35','20190110')
insert into @parent_course_dates values('35','20190111')
insert into @parent_course_dates values('35','20190114')
insert into @parent_course_dates values('35','20190115')
insert into @parent_course_dates values('35','20190116')
insert into @parent_course_dates values('35','20190117')
insert into @parent_course_dates values('35','20190118')
insert into @parent_course_dates values('35','20190121')
insert into @parent_course_dates values('35','20190122')
insert into @parent_course_dates values('35','20190123')
insert into @parent_course_dates values('35','20190124')
insert into @parent_course_dates values('35','20190125')
insert into @parent_course_dates values('35','20190128')
insert into @parent_course_dates values('35','20190129')
insert into @parent_course_dates values('35','20190130')
insert into @parent_course_dates values('35','20190131')
insert into @parent_course_dates values('35','20190201')
insert into @parent_course_dates values('35','20190204')
insert into @parent_course_dates values('35','20190205')
insert into @parent_course_dates values('35','20190206')
insert into @parent_course_dates values('35','20190207')
insert into @parent_course_dates values('35','20190208')
insert into @parent_course_dates values('35','20190211')
insert into @parent_course_dates values('35','20190212')
insert into @parent_course_dates values('35','20190213')
insert into @parent_course_dates values('35','20190214')
insert into @parent_course_dates values('35','20190215')
insert into @parent_course_dates values('35','20190218')
insert into @parent_course_dates values('35','20190219')
insert into @parent_course_dates values('35','20190220')
insert into @parent_course_dates values('35','20190221')
insert into @parent_course_dates values('35','20190222')
insert into @parent_course_dates values('35','20190225')
insert into @parent_course_dates values('35','20190226')
insert into @parent_course_dates values('35','20190227')
insert into @parent_course_dates values('35','20190228')
insert into @parent_course_dates values('35','20190301')
insert into @parent_course_dates values('35','20190304')
insert into @parent_course_dates values('35','20190305')
insert into @parent_course_dates values('35','20190306')
insert into @parent_course_dates values('35','20190307')
insert into @parent_course_dates values('35','20190308')
insert into @parent_course_dates values('35','20190311')
insert into @parent_course_dates values('35','20190312')
insert into @parent_course_dates values('35','20190313')
insert into @parent_course_dates values('35','20190314')
insert into @parent_course_dates values('35','20190315')
insert into @parent_course_dates values('35','20190318')
insert into @parent_course_dates values('35','20190319')
insert into @parent_course_dates values('35','20190320')
insert into @parent_course_dates values('35','20190321')
insert into @parent_course_dates values('35','20190322')
insert into @parent_course_dates values('35','20190325')
insert into @parent_course_dates values('35','20190326')
insert into @parent_course_dates values('35','20190327')
insert into @parent_course_dates values('35','20190328')
insert into @parent_course_dates values('35','20190329')
insert into @parent_course_dates values('35','20190401')
insert into @parent_course_dates values('35','20190402')
insert into @parent_course_dates values('35','20190403')
insert into @parent_course_dates values('35','20190404')
insert into @parent_course_dates values('35','20190405')
insert into @parent_course_dates values('35','20190408')
insert into @parent_course_dates values('35','20190409')
insert into @parent_course_dates values('35','20190410')
insert into @parent_course_dates values('35','20190411')
insert into @parent_course_dates values('35','20190412')
insert into @parent_course_dates values('35','20190415')
insert into @parent_course_dates values('35','20190416')
insert into @parent_course_dates values('35','20190417')
insert into @parent_course_dates values('35','20190418')
insert into @parent_course_dates values('35','20190422')
insert into @parent_course_dates values('35','20190423')
insert into @parent_course_dates values('35','20190424')
insert into @parent_course_dates values('35','20190425')
insert into @parent_course_dates values('35','20190426')
insert into @parent_course_dates values('35','20190429')
insert into @parent_course_dates values('35','20190430')
insert into @alldates values ('20190101','Tuesday')
insert into @alldates values ('20190102','Wednesday')
insert into @alldates values ('20190103','Thursday')
insert into @alldates values ('20190104','Friday')
insert into @alldates values ('20190105','Saturday')
insert into @alldates values ('20190106','Sunday')
insert into @alldates values ('20190107','Monday')
insert into @alldates values ('20190108','Tuesday')
insert into @alldates values ('20190109','Wednesday')
insert into @alldates values ('20190110','Thursday')
insert into @alldates values ('20190111','Friday')
insert into @alldates values ('20190112','Saturday')
insert into @alldates values ('20190113','Sunday')
insert into @alldates values ('20190114','Monday')
insert into @alldates values ('20190115','Tuesday')
insert into @alldates values ('20190116','Wednesday')
insert into @alldates values ('20190117','Thursday')
insert into @alldates values ('20190118','Friday')
insert into @alldates values ('20190119','Saturday')
insert into @alldates values ('20190120','Sunday')
insert into @alldates values ('20190121','Monday')
insert into @alldates values ('20190122','Tuesday')
insert into @alldates values ('20190123','Wednesday')
insert into @alldates values ('20190124','Thursday')
insert into @alldates values ('20190125','Friday')
insert into @alldates values ('20190126','Saturday')
insert into @alldates values ('20190127','Sunday')
insert into @alldates values ('20190128','Monday')
insert into @alldates values ('20190129','Tuesday')
insert into @alldates values ('20190130','Wednesday')
insert into @alldates values ('20190131','Thursday')
insert into @alldates values ('20190201','Friday')
insert into @alldates values ('20190202','Saturday')
insert into @alldates values ('20190203','Sunday')
insert into @alldates values ('20190204','Monday')
insert into @alldates values ('20190205','Tuesday')
insert into @alldates values ('20190206','Wednesday')
insert into @alldates values ('20190207','Thursday')
insert into @alldates values ('20190208','Friday')
insert into @alldates values ('20190209','Saturday')
insert into @alldates values ('20190210','Sunday')
insert into @alldates values ('20190211','Monday')
insert into @alldates values ('20190212','Tuesday')
insert into @alldates values ('20190213','Wednesday')
insert into @alldates values ('20190214','Thursday')
insert into @alldates values ('20190215','Friday')
insert into @alldates values ('20190216','Saturday')
insert into @alldates values ('20190217','Sunday')
insert into @alldates values ('20190218','Monday')
insert into @alldates values ('20190219','Tuesday')
insert into @alldates values ('20190220','Wednesday')
insert into @alldates values ('20190221','Thursday')
insert into @alldates values ('20190222','Friday')
insert into @alldates values ('20190223','Saturday')
insert into @alldates values ('20190224','Sunday')
insert into @alldates values ('20190225','Monday')
insert into @alldates values ('20190226','Tuesday')
insert into @alldates values ('20190227','Wednesday')
insert into @alldates values ('20190228','Thursday')
insert into @alldates values ('20190301','Friday')
insert into @alldates values ('20190302','Saturday')
insert into @alldates values ('20190303','Sunday')
insert into @alldates values ('20190304','Monday')
insert into @alldates values ('20190305','Tuesday')
insert into @alldates values ('20190306','Wednesday')
insert into @alldates values ('20190307','Thursday')
insert into @alldates values ('20190308','Friday')
insert into @alldates values ('20190309','Saturday')
insert into @alldates values ('20190310','Sunday')
insert into @alldates values ('20190311','Monday')
insert into @alldates values ('20190312','Tuesday')
insert into @alldates values ('20190313','Wednesday')
insert into @alldates values ('20190314','Thursday')
insert into @alldates values ('20190315','Friday')
insert into @alldates values ('20190316','Saturday')
insert into @alldates values ('20190317','Sunday')
insert into @alldates values ('20190318','Monday')
insert into @alldates values ('20190319','Tuesday')
insert into @alldates values ('20190320','Wednesday')
insert into @alldates values ('20190321','Thursday')
insert into @alldates values ('20190322','Friday')
insert into @alldates values ('20190323','Saturday')
insert into @alldates values ('20190324','Sunday')
insert into @alldates values ('20190325','Monday')
insert into @alldates values ('20190326','Tuesday')
insert into @alldates values ('20190327','Wednesday')
insert into @alldates values ('20190328','Thursday')
insert into @alldates values ('20190329','Friday')
insert into @alldates values ('20190330','Saturday')
insert into @alldates values ('20190331','Sunday')
insert into @alldates values ('20190401','Monday')
insert into @alldates values ('20190402','Tuesday')
insert into @alldates values ('20190403','Wednesday')
insert into @alldates values ('20190404','Thursday')
insert into @alldates values ('20190405','Friday')
insert into @alldates values ('20190406','Saturday')
insert into @alldates values ('20190407','Sunday')
insert into @alldates values ('20190408','Monday')
insert into @alldates values ('20190409','Tuesday')
insert into @alldates values ('20190410','Wednesday')
insert into @alldates values ('20190411','Thursday')
insert into @alldates values ('20190412','Friday')
insert into @alldates values ('20190413','Saturday')
insert into @alldates values ('20190414','Sunday')
insert into @alldates values ('20190415','Monday')
insert into @alldates values ('20190416','Tuesday')
insert into @alldates values ('20190417','Wednesday')
insert into @alldates values ('20190418','Thursday')
insert into @alldates values ('20190419','Friday')
insert into @alldates values ('20190420','Saturday')
insert into @alldates values ('20190421','Sunday')
insert into @alldates values ('20190422','Monday')
insert into @alldates values ('20190423','Tuesday')
insert into @alldates values ('20190424','Wednesday')
insert into @alldates values ('20190425','Thursday')
insert into @alldates values ('20190426','Friday')
insert into @alldates values ('20190427','Saturday')
insert into @alldates values ('20190428','Sunday')
insert into @alldates values ('20190429','Monday')
insert into @alldates values ('20190430','Tuesday')