如何在日期范围之间的日期之前获得一周的总和?

时间:2015-03-13 06:18:56

标签: sql sql-server-2008

为了计算商品的平均成本,我们从发票日期开始计算一周的数据。现在在存储过程中我尝试了这个

    i.InvoiceDate  BETWEEN DATEADD(day,-6, @StartDate) AND @StartDate

这是不对的,因为它显示所有日期的数据前6天。

例如,如果我给出了开始日期的日期:' 12/01 / 2014'并结束:' 12/10 / 2014' 平均成本应计算为sum(invoiceAmount)/ Sum(Quntity)

1 week before for '12/01/2014',
1 week before for '12/02/2014',
1 week before for '12/03/2014',
1 week before for '12/04/2014',
1 week before for '12/05/2014',
1 week before for '12/06/2014',
1 week before for '12/07/2014',
1 week before for '12/08/2014',
1 week before for '12/09/2014',
1 week before for '12/10/2014',

如何实现这一点..任何人都可以帮助我

2 个答案:

答案 0 :(得分:1)

试试这个,

表&数据:

Create Table MyTable
(
  invoiceDate date,
  invoiceAmount int,
  Quantity int
)

insert into MyTable Select '11/24/2014',100,10
insert into MyTable Select '11/25/2014',100,10
insert into MyTable Select '11/26/2014',100,10
insert into MyTable Select '11/27/2014',100,10
insert into MyTable Select '11/28/2014',100,10
insert into MyTable Select '11/29/2014',100,10
insert into MyTable Select '11/30/2014',100,10
insert into MyTable Select '12/01/2014',100,5
insert into MyTable Select '12/02/2014',100,5
insert into MyTable Select '12/03/2014',100,5
insert into MyTable Select '12/04/2014',100,5
insert into MyTable Select '12/05/2014',100,5
insert into MyTable Select '12/06/2014',100,5
insert into MyTable Select '12/07/2014',100,5

查询:

Select i.invoiceDate,Avg(p.Avg) from MyTable as i
cross apply (
  Select sum(invoiceAmount)/Sum(Quantity) as Avg from MyTable
  where invoiceDate  BETWEEN DATEADD(wk,-1, i.invoiceDate) AND i.invoiceDate
)as p
where Datepart(mm,i.invoiceDate)=12
group by i.invoiceDate

请参阅此处example

答案 1 :(得分:0)

DECLARE @Days INT

DECLARE @intFlag INT

SET @intFlag = 1

SET @Days = SELECT DATEDIFF(day, @StartDate, @EndDate) AS DiffDate

WHILE (@intFlag <=@Days)
BEGIN 

    Select @StartDate, sum(invoiceAmount)/Sum(Quntity) 
    FROM TableName Where Date BETWEEN DATEADD(day, -6, @StartDate) AND @StartDate

SET  @StartDate = DATEADD(day, 1, @StartDate )   
SET @intFlag = @intFlag + 1

END