У меня есть две таблицы: таблица расписания, которая содержит информацию о том, как назначен сотрудник, и таблицу чисел, в которой каждый номер соответствует дате.Поиск начальных и конечных дат из таблицы номеров дат (длительность дат)
таблицы выглядит следующим образом:
[Employee Schedule]
ID Employee ID Project ID Day ID
----------- ----------- ----------- -----------
1 64 2 168
2 64 2 169
3 64 2 170
4 64 2 171
5 64 1 169
6 64 1 170
7 64 1 171
8 64 1 172
9 64 2 182
10 64 2 183
11 64 2 184
и
[Day Numbers]
ID Day
----------- ----------
168 2009-06-18
169 2009-06-19
170 2009-06-20
171 2009-06-21
172 2009-06-22
173 2009-06-23
174 2009-06-24
175 2009-06-25
176 2009-06-26
177 2009-06-27
178 2009-06-28
179 2009-06-29
180 2009-06-30
181 2009-07-01
182 2009-07-02
183 2009-07-03
184 2009-07-04
Как вы можете видеть, Служащий 64 запланирован на проект 1 от 2009-06-19 до 2009-06-22 и проекта 2 с 2009-06-18 по 2009-06-21 и снова с 2009-07-02 по 2009-07-04.
Мой вопрос: какой алгоритм можно использовать для быстрого определения расписаний расписания сотрудника таким образом, чтобы я мог его отображать следующим образом?
Employee ID Project ID Duration
----------- ---------- ------------
64 1 2009-06-19 to 2009-06-22
64 2 2009-06-18 to 2009-06-21
64 2 2009-07-02 to 2009-07-04
Я могу сделать это на стороне SQL или на стороне кода. У меня есть Linq в моем распоряжении, если мне это нужно. Таблицу не нужно компилировать SQL. Это будет происходить динамично на веб-сайте и должно быть максимально эффективным. Я не хочу, чтобы каждый из них проходил и каждый раз искал перерывы в смежных днях, если мне это не нужно.
Вы можете сделать этот материал с аналитическими функциями, но я не знаю, если LINQ поддерживают их. –
Можем ли мы предположить, что непрерывные идентификаторы в [Расписание сотрудников] составляют диапазон? Или только [День ID]? – gbn
Можно предположить, что смежные кортежи [Идентификатор сотрудника], [Идентификатор проекта] и [День ID] задают диапазон. – Daniel