2013-12-10 97 views
1

我有一個表格,列出了每個日曆月份的部門和事件總數,如下所示。數據按部門和日期字段排序。每個記錄在一段時間內獲得最小值

我想要做的是獲得過去3個月的「計數」字段的最小值,併爲每個公司顯示,並在原始表格中顯示每行

例如,第一條記錄的Count = 2,並且Dept-001的2011-1-1之前沒有數據,所以min(Count)爲2. 第二條記錄的Count = 9,過去3個月的分鐘數(Count)爲2,等等......

你會如何編寫一個查詢來給出這個輸出?謝謝,

Dept Count Date 
001 2  2011-1-1 
001 9  2011-2-1 
001 1  2011-3-1 
001 4  2011-4-1 
001 5  2011-5-1 
001 3  2011-6-1 
002 2  2011-1-1 
002 7  2011-2-1 
002 1  2011-3-1 
002 9  2011-4-1 
002 6  2011-5-1 
002 1  2011-6-1 

輸出

Dept Min(Last 3 Month) Date 
001 2     2011-1-1 
001 2     2011-2-1 
001 1     2011-3-1 
001 1     2011-4-1 
001 1     2011-5-1 
001 3     2011-6-1 
002 2     2011-1-1 
002 2     2011-2-1 
002 1     2011-3-1 
002 1     2011-4-1 
002 1     2011-5-1 
002 1     2011-6-1 
+0

這有幫助嗎? http://stackoverflow.com/questions/5662545/how-do-i-group-on-continuous-ranges –

回答

2

您需要用期自聯接表:

SELECT t1.dept, MIN(t2.cnt) min_last_3_month, t1.dat FROM 
    tbl t1 
INNER JOIN tbl t2 ON t1.dept = t2.dept 
       AND t2.dat > DATEADD(MONTH, -3, t1.dat) 
       AND t2.dat <= t1.dat 
GROUP BY 
    t1.dept, t1.dat 
ORDER BY 
    t1.dept, t1.dat 

你可以嘗試在SQLFiddle

0
SELECT x.[Dept], x.[Date], x.[Count], 
     (
      SELECT MIN(y.[Count]) FROM dbo.MyTable y 
      WHERE y.[Dept] = x.[Dept] 
      AND  y.[Date] BETWEEN DATEADD(DAY, 1, DATEADD(MONTH, -3, x.[Date])) AND x.[Date] -- Assumption: [Date]'s type is DATE 
     ) AS MIN_Count 
FROM dbo.MyTable x; 
相關問題