计算SQL中增量值的平均值

时间:2014-04-24 11:28:03

标签: sql sql-server-2012 average

我一直在尝试创建一个SQL查询来计算SQL中增量值的每日平均值。

这就是表格的样子

Name   Date              Value
-------------------------------------
Item1  2014/04/22 10:00    900
Item2  2014/04/22 10:00    200
.....
ItemN  2014/04/22 10:00    480

Item1  2014/04/23 10:00    1000
Item2  2014/04/23 10:00    324
.....
ItemN  2014/04/23 10:00    780

Item1  2014/04/23 10:10    1050
Item2  2014/04/23 10:10    424
.....
ItemN  2014/04/23 10:10    880

作为查询的结果,我想生成这样的东西:

Name     Daily_Average
-----------------------    
Item1    150
Item2    224
...
ItemN    400

对于这个特殊的例子,我通过取最大值来计算每日平均值。该项目的最小值,从最大值减去最小值并除以天数(该示例仅过了一天)。

我已经很长时间没有使用SQL了,所以任何帮助都会非常感激。

非常感谢。

3 个答案:

答案 0 :(得分:2)

根据您的描述,您似乎想要类似:

select i.item,
       (max(i.value) - min(i.value)) / count(distinct cast(i.date as date)) as Daily_Average
from items i
group by i.item;

目前还不清楚"将它除以天数"真正意思。我在口语意义上理解这一点。但是,您似乎将时间值存储在标记为" date"的列上。因此,不清楚您想要计算的数量(有或没有时间值)。

答案 1 :(得分:0)

如果您想根据天数取平均值,您可以通过两种方式接近它:具有唯一日期的数字记录(在这种情况下您不计算间隙)或第一个和最后一个日期之间的天数(也算差距天)。 Gordon Linoff在第一个案例中提供了解决方案。

以下是第二种情况的解决方案:

select Name,
   (max(value) - min(Value)) / datediff(day, min(cast([date] as date)), max(cast([date] as date))) as Daily_Average
from table1
group by Name

注意:如果只有一个日期,这将不起作用。如果您有2个连续日期,则根据您的问题将天数视为1,所以如果只有一天,我不确定会发生什么。

答案 2 :(得分:0)

请参阅下文,了解使用您的规则计算平均值:

 SELECT Name,
        CASE
             WHEN DaysDifference > 0 THEN ValueDifference / DaysDifference
             ELSE ValueDifference / 1 -- Handles DateDifference = 0 
        END AS AverageValue
   FROM
        (
         SELECT Name,
                MAX(Value) - MIN(Value) AS ValueDifference,
                DATEDIFF(day, MIN(Date), MAX(DATE)) AS DaysDifference
           FROM Incrementals
          GROUP BY Name
        ) AS Summary

(Full SQL Fiddle示例here

我假设您只想在没有天差的情况下获得平均值,但您可以根据需要进行更改。