我有一张表格,列出了每个日历月的部门和事件总数,如下所示。数据按部门和日期字段排序。
我要做的是获取每个公司过去3个月的“计数”字段的最小值,并在原始表格中显示每行。
例如,第一条记录的Count = 2且在2011-1-1之前没有Dept-001的数据,因此min(Count)为2。 第二个记录的Count = 9,过去3个月的min(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 :(得分: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
上试用答案 1 :(得分: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;