簡體   English   中英

查詢平均值並滾動12個月平均值

[英]Querying average and rolling 12 month average

我希望能夠找出每個客戶的更改數量的最近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個月的滾動平均值。

評論后的其他信息:

使用代碼

;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

嘗試此操作,它應使用運行平均值來運行於sqlserver 2012:

;WITH CTE as
(
SELECT 
    crq_requested_by_company as Customer,
    COUNT(crq_number) Nuc,
    dateadd(month, datediff(month, 0, start_date),0) m
FROM 
    change_information ci1
WHERE
  start_date >= dateadd(month,datediff(month, 0,getdate()) - 12,0)
GROUP BY 
    crq_requested_by_company,
    datediff(month, 0, 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM