我正在使用SQL Server 2012並有一個查詢,我需要將其轉換爲每月運行的總數。如何計算具有多個日期條件的運行總計列數
當前查詢預計日期的輸入參數和輸出的所有組,每組共爲輸入年月日
DECLARE @InputDate DATETIME
SET MonthEndDate = '2016/07/31'
SELECT P.GroupID,Count(P.PersonID) as GroupTotal
from PersonData P
WHERE
P.StartedDate IS NOT NULL
AND P.StartedDate < @InputDate
AND (
P.OutcomeDate > @InputDate
OR P.OutcomeDate IS NULL
)
GROUP BY P.GroupID
使用相同的查詢邏輯我現在需要重新填充每月的歷史數據,以便我需要在所有月份使用Running Total,例如(2016/01/01,2016/02/01,2016/03/01等),而不是一個具體的月份
我可以做到這一點,如果有一個日期標準例如對於StartedDate 例如
SELECT P.*,
SUM(GroupTotal) OVER (PARTITION BY GroupID ORDER BY StartedMonth) AS RunningTotal
FROM (
SELECT P.GroupID,LEFT(CONVERT(VARCHAR, P.StartedDate, 112), 6) as StartedMonth,Count(P.PersonID) as GroupTotal
from PersonData P
WHERE
P.StartedDate IS NOT NULL
GROUP BY P.GroupID,LEFT(CONVERT(VARCHAR, P.StartedDate, 112), 6)
) P
ORDER BY GroupID,StartedMonth
但我原來的查詢有兩個日期的標準不只是一個
1. P.StartedDate < @InputDate
2. P.OutcomeDate > @InputDate or P.OutcomeDate IS NULL
是否有可能寫一個有一個以上的日期標準運行總
編輯查詢:
這裏是輸入PersonData表的示例
PersonID,GroupID,StartedDate,OutcomeDate
1,1001,'2016/05/08',null
2,1001,'2016/05/04','2016/08/03'
3,1001,'2016/06/04','2016/08/03'
4,1001,'2016/07/04','2016/07/07'
5,1001,'2016/07/04','2016/08/08'
6,1001,'2016/08/04','2016/09/03'
7,1001,'2016/08/04','2016/09/03'
8,1001,'2016/09/04','2016/09/08'
期望輸出
GroupId,EndMonthDate,MonthCount, RTMonthCount
1001,'2016/05/31', 2, 2
1001,'2016/06/30', 1, 3
1001,'2016/07/31', 1, 4
1001,'2016/08/31', 2, 6
1001,'2016/09/31', 0, 6
因此,在上面的例子中可以看到的人ID 4 & 8不計爲只無1匹配的標準但不是標準沒有2.
請出示樣本數據和預期的結果,並與它 – TheGameiswar
解釋沿着我添加了一個例子 – devc2
但看根據您的標準,PersonID 6和7也將被排除,因爲它們不符合日期標準,對嗎? –