2013-12-10 67 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; 
相关问题