2012-04-27 74 views
5

我有一张表,其中包含大约50,000条信息记录,该记录已设置为回溯至当前财政年度的开始时间。累计和动态地累计每个月的一个字段

目前的情况是我自上个月所以目前在那里的数据假设我们仍在寻找回来,早在4月1日2011年

音符(当我刷新数据,将有没有更新此表只有在有2012年4月的数据,因为我们现在是四月,当年5月将有2012年4月和2012年5月等等...)

每个记录有4列,我关心的是:

Department, 
Incident date, 
month, 
year, 
reduced 

月份和年份列已经生成米事件发生日期场是这种格式:

2011-06-29 00:00:00.000 

我需要为每个部门,总结了减少,但在累积的方式。

例如,虽然2011年4月将是我目前最早的月/年数据,但我想知道每个部门4月份的总数减少情况。

那么对于五月我想四月&可能组合,六月我需要四月,五月,六月等...

当我重新导入数据到是否有这样做,这样一种智能的方式此表将认识到,现在只有一个月,今年已经更新,并于即日起至下月只显示四月份的总和(减少)

+0

什么是'事件date'字段的类型?约会时间? VARCHAR? – 2012-04-27 14:48:05

+0

@Mark Byers datetime – JsonStatham 2012-04-27 14:53:45

+0

@SelectDistinct看看这里: - http://stackoverflow.com/questions/2120544/how-to-get-cumulative-sum – 2012-04-27 15:00:54

回答

1
select t1.id, t1.singlenum, SUM(t2.singlenum) as sum 

    from @t t1 inner join @t t2 on t1.id >= t2.id 
    group by t1.id, t1.singlenum 
    order by t1.id 
1

下将返回DepartmentYearMonth分组的累积总数。如果您在刷新时清除之前纳税年度的数据,则可以省略WHERE条款。

SELECT  T1.[Year], 
      T1.[Month], 
      T1.Department, 
      SUM(T2.Reduced) ReducedTotals 
FROM  [TABLENAME] T1 
INNER JOIN [TABLENAME] T2 ON (T1.Department = T2.Department AND T1.IncidentDate >= T2.IncidentDate) 
WHERE  T1.IncidentDate >= '2012-04-01' 
GROUP BY T1.[Year], 
      T1.[Month], 
      T1.Department 
ORDER BY T1.[Year], 
      T1.[Month], 
      T1.Department 
+3

如果你正在使用甚至远程大量的记录,我建议查看评论部分中链接的其他答案。对于任何合理的体积,这样的半硬体产品可能会变得非常缓慢,以至于即使是[*咳嗽*]光标也会变得更快。 * [但请注意,这是行不通的:]] * – MatBailie 2012-04-27 15:15:18