【发布时间】:2026-01-31 14:45:01
【问题描述】:
我有两个表:一个包含有关如何安排员工的信息的日程表和一个数字表,其中每个数字对应一个日期。
表格如下:
[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 计划在 2009 年 6 月 19 日至 2009 年 6 月 22 日的项目 1 和 2009 年 6 月 18 日至 2009 年 6 月 21 日和 2009 年 7 月 2 日的项目 2至 2009 年 7 月 4 日。
我的问题是:我可以使用什么算法来快速确定员工日程安排的跨度,以便我可以如下显示?
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 是否支持这些。
-
我们可以假设 [Employee Schedule] 中的连续 ID 构成一个范围吗?还是只有 [Day ID]?
-
我们可以假设 [Employee ID]、[Project ID] 和 [Day ID] 的连续元组构成一个范围。
-
即:(64,1,169),(64,1,170),(64,1,171) 是该项目和员工的 3 天范围。
-
还有另一种(可能像泥巴一样慢)解决方案,带有层次查询(从 ... 连接开始)linq 和您的数据库是否支持这些?
标签: sql vb.net linq algorithm clr