2014-12-02 28 views
0

我試圖在6個月的時間範圍內[數量]> 4 [員工數量]和第一個[使用日期] [UsedDate]。如果僱員的工作時間超過6個月,我希望重新開始數量的總和,但我似乎無法弄清楚如何計算多個行的數量[Qty],其中這些使用日期僅在6個月的時間內,如果這樣不適用,從下一個最早的UsedDate開始,查看員工[ID]是否符合標準。在SQL的日期列的6個月內總結按ID分組的列的最有效方法是什麼?

我最初在第二部分中有第一個查詢,但它不會以這種方式識別[UsedStartDate]和[UsedEndDate]。我確定我做錯了所以我把它分解出來,但SUM或者返回所有行的總數(不是我想要的)或者該行的總和(也不是我想要的)。

SELECT ID 
    ,RowID 
    ,UsedDate 
    ,Qty 
    ,UsedStartDate = UsedDate 
    ,UsedEndDate = DATEADD(month, +6, UsedDate) 
    INTO #DateRange 
FROM #CrazyMath 


;WITH Used1 AS (SELECT ID 
    ,RowID 
    ,UsedDate 
    ,RowNum = ROW_Number() OVER(ORDER BY ID, RowID) FROM #CrazyMath) 
        -- order (needed?) 
    SELECT q.ID 
     --,q.RowID 
     --,q.UsedDate 
     --,UsedStartDate 
     --,UsedEndDate 
     ,SUM(q.Qty) OVER(PARTITION BY a.ID 
      --, a.UsedDate 
     ORDER BY a.ID 
          ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS sumqty    FROM #CrazyMath q 
    INNER JOIN #DateRange a 
    ON a.ID = q.ID AND a.RowID = q.RowID 


Output: 
ID Row UsedDate Qty SumQty 
1 1 2/12/2013 4 4 
1 2 10/30/2013 4 8 
1 3 7/30/2014 4 12 
2 1 7/9/2012 1 1 
2 2 7/17/2012 1 2 
2 3 8/3/2012 1 3 
2 4 8/27/2012 1 4 
2 5 9/24/2012 1 5 
2 6 10/12/2012 1 6 
3 1 2/11/2014 4 4 
4 1 10/17/2003 4 4 
4 2 11/17/2003 4 8 
4 3 12/18/2003 4 12 
4 4 1/14/2004 4 16 
4 5 2/6/2004 4 20 
4 6 2/26/2004 4 24 
4 7 3/25/2004 4 28 
5 1 8/31/2010 1 1 
5 2 9/7/2010 1 2 
5 3 9/23/2010 2 4 
6 1 10/29/2003 3 3 
6 2 6/5/2006 8 11 
6 3 6/25/2006 8 19 
6 4 7/25/2006 8 27 
6 5 8/24/2006 8 35 
6 6 9/18/2006 8 43 
6 7 11/14/2006 8 51 
6 8 12/7/2006 8 59 
6 9 12/19/2006 8 67 

僱員1不應該總結,因爲每個UsedDate之間的DATEDIFF是> 6個月 僱員2應該返回UsedDate其中行ID = 1(在組第一日期其中總和> 4且總天數< 6個月) ...員工6應返回UsedDate其中行ID = 2(在組第一日期其中總和> 4且總天數< 6個月)

更新 - 通過CASE也嘗試 薩姆但將僅返回列或值,而不是分組行的總和(這是180天比6個月): ,SUM(CASE WHEN t2.Qt Y> 4 OR(t2.Qty < 5 AND(t1.SumDays爲空或t1.SumDAys < 180)) THEN ELSE t2.Qty '0' END),爲總和

回答

0

作爲解決方案的一部分,嘗試使用CASE語句SUM內,沿

SUM(CASE WHEN UsedDate > dateadd(m,-6,getdate()) THEN q.Qty ELSE 0 END) 

行我知道,並沒有解決整個問題的東西,但也許它有助於在正確的方向移動。

+0

謝謝。我只是更新,我已經嘗試過,也許這就是我寫它的方式,但它返回CASTY子句dateadd中Qty的值而不是多個Qty行(每個員工)的總和。例如:ID 1;總和4 ID 1; Sum 0 ID 1; Sum 0 – Cams42 2014-12-02 19:30:13

+0

嗯是的,現在有道理。有一段時間沒有寫過其中之一;-)。 CASE聲明需要提交給CTE。 – sfuqua 2014-12-02 20:54:48

相關問題