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)'? –