1
我用合适的方法来在MS SQL下面的查询挣扎2008-SQL查询帮助 - 资源可用性
我有一个表下面的表格追踪员工的项目拨款,主要有:
- AllocID INT PK
- 专案编号INT FK
- EMPLID INT FK
- AllocPct小数
- 所有ocStartDate日期时间
- AllocEndDate日期时间
也就是说,员工被分配到一个指定的时间段和百分比的项目。作为这些数据的一个函数,我试图快速查询员工有可用能力的日期 - 也就是最早的日期,其中SUM(AllocPct)< 1.
我被困在一套为此查询的方法,理想情况下可以处理一组员工(即将此字段作为所有员工的列返回)。我有一个可用于个人员工的“工作”查询(下面),但它是一团糟(数字表,嵌套等);必须有更好的方法来解决这个问题。
SELECT MIN(DateDay) AS DateAvailable
FROM (SELECT b.EmplID, a.DateDay, SUM(b.AllocPct) AS SumAllocPct
FROM p_AllocDetailDynView AS b INNER JOIN
(SELECT DATEADD(day, Number - 1, GETDATE()) AS DateDay
FROM master.dbo.Numbers AS n) AS a ON b.AllocEndDate > a.DateDay
WHERE (b.EmplID = @emplID)
GROUP BY a.DateDay, b.EmplID) AS a
WHERE (SumAllocPct < 1)
GROUP BY EmplID
任何建议/方向将不胜感激。
谢谢!
编辑 - 这里有一个代表性的数据样本:分别
AllocDetailID ProjectID EmplID AllocPct AllocStartDate AllocEndDate
6204 32 931 0.50 2011-01-01 00:00:00.0000000 2012-01-01 00:00:00.0000000
6477 64 932 1.00 2011-05-27 00:00:00.0000000 2013-02-08 00:00:00.0000000
6550 12 931 0.50 2011-06-01 00:00:00.0000000 2012-06-01 00:00:00.0000000
的有问题的查询意图的返回值将是雇员931和932 1/1/2012和2013年2月8日。
考虑到这一点,“可用日期”实际上只适用于当前日期 - 也就是说,从现在开始,该员工最快有什么可用性?希望这是有道理的。
请您提供的样本数据和期望结果的几行?我已经为你重新标记了这个问题(谢谢你提到SQL Server 2008,但它也可以帮助你用这个版本标记问题)。 –
已更新。感谢您的关注。 –
好奇的是,如果AllocStartDate只包含日期,为什么不使用'DATE'而不是'DATETIME2(7)'? –