gpt4 book ai didi

sql - 从日期数字表中查找开始和结束日期(日期持续时间)

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:20:32 26 4
gpt4 key购买 nike

我有两个表:一个包含有关如何安排员工的信息的时间表和一个数字表,其中每个数字对应一个日期。

表格看起来像:

[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-06-19 到 2009-06-22 的项目 1 和从 2009-06-18 到 2009-06-21 的项目 2 以及从 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 编译。这将在网站上动态发生,并且应该尽可能高效。如果不需要的话,我不想遍历每一个并在连续几天寻找休息时间。

最佳答案

假设对于部分解决方案,日期 ID 始终是连续的...

select *
from employee_schedule a
where not exists( select *
from employee_schedule b
where a.employeeid = b.employeeid
and a.projectid = b.projectid
and (a.dayid - 1) = b.dayid )

列出开始日期 ID:

 ID      EMPLOYEEID       PROJECTID           DAYID 
1 64 2 168
5 64 1 169
9 64 2 182



select *
from employee_schedule a
where not exists( select *
from employee_schedule b
where a.employeeid = b.employeei
and a.projectid = b.projectid
and (a.dayid + 1) = b.dayid )

列出结束日期 ID:

  ID      EMPLOYEEID       PROJECTID           DAYID 
4 64 2 171
8 64 1 172
11 64 2 184

关于sql - 从日期数字表中查找开始和结束日期(日期持续时间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1019661/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com