为了计算商品的平均成本,我们从发票日期开始计算一周的数据。现在在存储过程中我尝试了这个
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',
如何实现这一点..任何人都可以帮助我
答案 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