T-SQL按日期和对象分组计算X期间的总计

T-SQL按日期和对象分组计算X期间的总计,sql,tsql,sql-server-2008-r2,aggregate-functions,Sql,Tsql,Sql Server 2008 R2,Aggregate Functions,我有一个大数据集,在数据集中的每一天,我都需要计算前5天、7天和10天每一行的聚合活动,而不仅仅是针对当前日期,这不是一个直接运行的总时间。。但在特定时期内 我为活动构建了每日聚合,但在聚合日期和对象,然后计算每行过去的X间隔时遇到问题 我正在使用MS SQL Server 2008 R2 例如,昨天用-1天,-2天,-3天 第1天-前一天/昨天 反对A 2 对象B 231 对象C 232 第2天 反对A 5 对象B 117 对象C 127 第3天 反对A 9 对象B 200 对象C 175 我

我有一个大数据集,在数据集中的每一天,我都需要计算前5天、7天和10天每一行的聚合活动,而不仅仅是针对当前日期,这不是一个直接运行的总时间。。但在特定时期内

我为活动构建了每日聚合,但在聚合日期和对象,然后计算每行过去的X间隔时遇到问题

我正在使用MS SQL Server 2008 R2

例如,昨天用-1天,-2天,-3天

第1天-前一天/昨天

反对A 2 对象B 231 对象C 232 第2天

反对A 5 对象B 117 对象C 127 第3天 反对A 9 对象B 200 对象C 175 我的预期结果将在当前日期运行,但不是当前日期

日期、TID、1D、2D、3D列 日期,对象A,2,7,16 日期,对象B,231579779 日期,对象C,232,359,534 我查看了和,更好的是,这是上一个X周期内所有活动和所有记录的总和,并为所有行返回它,因为我需要为特定于对象的周期聚合查询

;以[stSUM]作为 选择 德克萨斯州 ,CASTTX.DT_需求,日期为AgrGrp ,德克萨斯州DayofYr ,德克萨斯州莫菲市 ,TX.DayofM ,TX.DayofW ,TX.TrdPayDay ,TX.Hdy_政府 ,TX.Hdy_小说 ,当TX.TX_BG='Evt'然后1或0结束为EvtCnt时,SUMCASE ,SUMCASE当TX.TX_Yes=1时,则TX.Rqt_Amt ELSE 0结束为Amt 从CRS1.dbo.JustData 分组 CASTTX.DT_请求作为日期 ,德克萨斯州 ,德克萨斯州DayofYr ,德克萨斯州莫菲市 ,TX.DayofM ,TX.DayofW ,TX.TrdPayDay ,TX.Hdy_政府 ,TX.Hdy_小说 选择AgrGrp,\u TID,
从stSUM bd2中的select top 7*中选择sumAmt,其中bd2.AgrGrp我的方法是使用日期间隔汇总子查询中需要的日期范围

;with DayInfo as
(
select cast(runtime as date) [Date], 
targetType,
round(sum(duration),0) as duration
from Logs
group by cast(runtime as date), 
targetType)


select di.Date,
di.targetType,
di.duration,
d2.d2DurationSum,
d7.d7DurationSum
from DayInfo di
join (select d2.Date,
      d2.targetType,
      sum(dd2.duration) d2DurationSum
      from DayInfo d2
      join DayInfo dd2
      on dd2.Date between dateadd(day, -1, d2.Date) and d2.Date
      and d2.targetType = dd2.targetType
      group by d2.Date,
      d2.targetType) as d2
on di.Date = d2.Date
and di.targetType = d2.targetType
join (select d7.Date,
      d7.targetType,
      sum(dd7.duration) d7DurationSum
      from DayInfo d7
      join DayInfo dd7
      on dd7.Date between dateadd(day, -6, d7.Date) and d7.Date
      and d7.targetType = dd7.targetType
      group by d7.Date,
      d7.targetType) as d7
on di.Date = d7.Date
and di.targetType = d7.targetType
order by 1, 2
这将产生如您所描述的输出