【发布时间】:2015-08-31 12:56:31
【问题描述】:
我有一个如下表,其中包含截至今天的 EntryTime 列中的条目。
表 1
PersonID|StartTime|EndTime|EntryTime
1 |10:00 |12:00 |2014-01-01
1 |10:00 |12:00 |2014-01-02
1 |10:00 |12:00 |2015-01-03
...
和一个合同表:
表2
PersonID|ContractID| ContractStart| ContractType|Hours
1 |1 |2014-01-01 |Student |8
1 |2 |2015-01-01 |Trainee |40
1 |3 |2015-03-01 |Student |20
1 |4 |2015-05-01 |Student |12
现在我想使用下面提到的结果表来计算当前contractType 的时间(datediff(minute, StartTime, Endtime))。 contracttype 必须从最后一个开始连续。所以在这个例子中,合同 3+4 的所有条目都是相关的。
我的想法是使用loop 来选择相关合同。
WHILE (Select ContractType from Table2) = 'Student'
Begin
Select ContractStart from Table2
Order By ContractStart
End
不幸的是,循环还没有工作,如果我不知道如何在 where 子句中实现它。
我想要得到的结果表是 subset 的 Table1,所有条目都从 2015-03-01 开始
【问题讨论】:
-
不要为此使用循环。准备好sqlfiddle.com,你可能会得到基于集合的解决方案。共享样本数据所需的输出。
-
与您的问题无关,但是您在 table1 中的记录是否可能跨越一个日历日?
-
不,这是不可能的。例如。如果你通宵工作,你必须做两个条目。只要我从 table2 中获得正确的日期,我就可以很容易地过滤表。
-
能否请您发布所需输出的示例。