我有导演根据导演的帮助是否有效来支付佣工。
有2个观点如下: -
总
Name TimeIn TimeOut
Bob 2012-07-17 07:00:00.000 2012-07-17 16:00:00.000
Sam 2012-07-17 10:00:00.000 2012-07-17 20:00:00.000
Beatly 2012-07-17 14:00:00.000 2012-07-17 23:00:00.000
Mac 2012-07-17 21:00:00.000 2012-07-18 07:00:00.000
辅助
Name TimeIn TimeOut
Fred 2012-07-17 15:59:00.000 2012-07-18 00:19:00.000
现在弄清楚谁在那个时间工作并不是困难的部分,或者至少它不是我脑子里有问题的部分。什么是找到哪个和什么分钟以及由谁重叠的分钟。并按照使用的时间将它们组合在一起。因为他们都将与抄写员分摊小时工资。理想情况下,结果如下。
DirName HelperStart HelperEnd
Bob 2012-07-17 15:59:00.000 2012-07-17 16:00:00.000
Sam 2012-07-17 15:59:00.000 2012-07-17 16:00:00.000
Beatly 2012-07-17 15:59:00.000 2012-07-17 16:00:00.000
Sam 2012-07-17 16:01:00.000 2012-07-17 20:00:00.000
Beatly 2012-07-17 16:01:00.000 2012-07-17 20:00:00.000
Beatly 2012-07-17 20:01:00.000 2012-07-17 21:00:00.000
Beatly 2012-07-17 21:01:00.000 2012-07-17 23:00:00.000
Mac 2012-07-17 21:01:00.000 2012-07-17 23:00:00.000
Mac 2012-07-17 23:01:00.000 2012-07-18 00:19:00.000
使用SQL server 2008.我希望简单的细分就足够了。找到足够的查询,看看是否有人与时间冲突,但没有细分上述。
答案 0 :(得分:1)
如果我理解正确,这只是一个“简单”连接,您使用重叠的时间间隔。第二部分是测量助手与导演时间重叠的时间。这段时间从导演和助手TimeIn的后期开始,到他们TimeOut的早期结束。
我认为以下查询捕获了这个逻辑:
select d.name as DirectorName, h.name as HelperName,
(case when d.timeIn > h.timeIn then d.timeIn else h.timeIn end) as HelperStart,
(case when d.timeOut > h.timeOut then h.timeOut else d.timeOut end) as HelperEnd
from director d join
helper h
on d.timeIn < h.timeOut and
d.timeOut >= h.timeIn