SQL中的每日平均

时间:2016-10-31 20:37:43

标签: sql sql-server

我在下面有一个简单的sql。我想计算每日平均值。但是,当我运行我的sql时,我将不得不每天更改参数和天数。消除这些重复步骤的更好方法是什么?

Declare start_dt as datetime
Declare end-dt as datetime 

Set start_dt ='10/01/16'
Set end_dt = '10/31/16

Select
Product_Name,
Count(Qty) /30 --want to calculate the average last 30 days
From temp 
Where delivery_dt >=start_dt
And delivery_dt<end_dt
Group by product_name 

如上所述,我必须手动更改日期范围的参数和获得平均值的天数。在sql server中有没有办法让我不必更改平均值的参数和数量?我希望我的平均结果显示为float

2 个答案:

答案 0 :(得分:1)

也许这可以帮到你。

DECLARE @Start_dt DATETIME
DECLARE @End_dt   DATETIME

SET @Start_dt = GETDATE()
SET @End_dt = DATEADD(DAY, 30, @Start_dt);


SELECT  Product_Name,
        Count(Qty)/DATEDIFF(DAY,@Start_dt,@End_dt) AS [Daily Average] --want to calculate the average last 30 days
FROM temp 
WHERE (delivery_dt >= @Start_dt) AND (delivery_dt < @End_dt)
GROUP BY Product_Name 

但是,你提到你经常使用这种sql查询,所以我建议你为这个创建存储过程,并且只需要一天调用它。 要创建过程,您可以查看microsoft documentation

答案 1 :(得分:-1)

您可以使用参数endDate和dateDifference创建存储过程, 例如:

CREATE PROCEDURE usp_Get_Average_Quantiity(@EndDate DateTime, @DateDifference int)
AS
Declare @StartDate DateTime = DATEADD(Day, @DateDifference, @EndDate)
Select
Product_Name,
CAST(COUNT(Qty) AS FLOAT) / @DateDifference -
From temp 
Where delivery_dt >=@StartDate 
And delivery_dt<@EndDate
Group by product_name 

要返回浮动我使用:

CAST(COUNT(Qty) AS FLOAT) / @DateDifference

@DateDifference可能在您的情况下为30,但您可以根据您的具体情况更改它,而无需更改过程。与endDate相同。