SQL:分组依据的dynamic值的范围

这与其他一些问题类似,但这些使用CASE,我不能。 这是在Oracle上,我将从Excel工作表中运行查询。 (顺便说一下,这些不支持WITH,这使得生活变得更加困难)

我有一个大表中的date范围 – 如2011年3月4日,2012年4月4日,2013年7月1日,2013年9月1日…..然后,我有另一个表,在某些date。 所以我需要做的是每个员工在每个干预时间段内工作的小时数。 所以表格就像

Dates 1-May-2011 5-Aug-2011 4-Apr-2012 .... 

和另一个

 Employee Hours Date Sam 4 1-Jan-2011 Sam 7 5-Jan-2011 Mary 12 7-Jan-2012 Mary 5 12-Dec-2013 ...... 

所以结果应该是

 Employee Hours In Date Range Till Sam 11 1-May-2011 Sam 0 5-Aug-2011 Sam 0 4-Apr-2012 Mary 0 1-May-2011 Mary 0 5-Aug-2011 Mary 12 4-Apr-2012 .... 

任何指针如何实现这一点,请?

我不熟悉Oracle SQL,它的能力/限制,但是因为你问了指针,这是我的意见:
连接规则是EmployeeHours.Date < Dates.Dates ,join表(INNER JOIN)。 然后GROUP BY Employee, Dates.Dates并select分组列+ SUM(小时)。 最后(使用您的示例数据)是:

 员工| date| 小时
 Sam |  1-May-2011 |  11
 Sam |  5-Aug-2011 |  11
 Sam |  2012年4月4日|  11
 Mary |  1-May-2011 |  0
 Mary |  5-Aug-2011 |  0
 Mary |  2012年4月4日|  12

与其他(更复杂的)数据相比,会有更多“有趣”的结果,但基本上每行包含的总小时数都达到了这一点。

然后,您可以将其用作外部查询的input,以查找所有行的MAX(Hours) ,其中Dates < currentDates并从结果中减去。

再次,这不是一个完整的答案,但这是一个应该工作的方向。