我一直在尝试创建一个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了,所以任何帮助都会非常感激。
非常感谢。
答案 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)
我假设您只想在没有天差的情况下获得平均值,但您可以根据需要进行更改。