【发布时间】:2016-06-16 13:13:27
【问题描述】:
我希望能够找出每个客户的更改次数统计数据的每月平均值和过去 12 个月的滚动平均值。
SELECT
crq_requested_by_company as 'Customer',
COUNT(crq_number) as 'Number of Changes'
FROM
change_information ci1
GROUP BY
crq_requested_by_company
目前我只是在计算总数,我的结果看起来像这样
crq_requested_by_company count
A 4
B 2
C 2269
D 7696
E 110
F 91
G 33
我将使用的日期列称为“start_date”。
我认为需要GETDATE() 来计算过去 12 个月的滚动平均值。
cmets 之后的其他信息:
使用代码
;WITH CTE as
(
SELECT
crq_requested_by_company as Customer,
COUNT(crq_number) Nuc,
dateadd(month, datediff(month, 0, crq_start_date),0) m
FROM
change_information ci1
WHERE
crq_start_date >= dateadd(month,datediff(month, 0,getdate()) - 12,0)
GROUP BY
crq_requested_by_company,
datediff(month, 0, crq_start_date)
)
SELECT
Customer,
avg(Nuc) over (partition by Customer order by m) running_avg,
m start_month,
avg(Nuc) over (partition by Customer) simply_average
FROM
CTE
ORDER BY Customer, start_month
这给出了结果
Customer running_avg start_month simply_average
A 8 01/01/2016 00:00 13
A 10 01/02/2016 00:00 13
A 10 01/03/2016 00:00 13
A 11 01/04/2016 00:00 13
A 14 01/05/2016 00:00 13
A 13 01/06/2016 00:00 13
B 1 01/01/2016 00:00 1
C 3 01/01/2016 00:00 2
C 3 01/02/2016 00:00 2
C 2 01/03/2016 00:00 2
C 2 01/04/2016 00:00 2
C 2 01/05/2016 00:00 2
C 2 01/06/2016 00:00 2
它需要看起来像这样,所以上面的结果的平均值 - 上面 6 个月的平均值(我目前只有 6 个月的数据,最终需要是 12 个月)
Customer avg_of_running_avg
A 11
B 1
C 2
【问题讨论】:
-
简单平均或日加权平均。
-
@JohnCappelletti 1) 只是每月的简单平均计数 2) 过去 12 个月每月计数的滚动平均值
-
所以你只需要 running_avg 结果的平均值?这应该通过我刚才所做的更改来解决
标签: sql sql-server average window-functions getdate