sql命令,用于查找过去6个月内用户访问网站的平均次数

sql命令,用于查找过去6个月内用户访问网站的平均次数,sql,sql-server,Sql,Sql Server,我有一个表,有两列,日期和访问次数 我需要计算过去6个月每月访问的平均计数差异 Date Number_of_Visits 2018-04-06 5 2018-02-06 6 2017-04-10 3 2017-02-10 9 SQL应该输出 Avg_count difference visits past 6 months 5-3=2 6-9=-3 -3+2/2=-0.5 sql查询输出应为-0.5 如下所示创建sql With cte as ( SELE

我有一个表,有两列,日期和访问次数

我需要计算过去6个月每月访问的平均计数差异

Date       Number_of_Visits

2018-04-06   5
2018-02-06   6
2017-04-10   3
2017-02-10   9
SQL应该输出

Avg_count difference visits past 6 months
5-3=2
6-9=-3

-3+2/2=-0.5
sql查询输出应为-0.5

如下所示创建sql

With cte as (
SELECT Year(v1.date) as Year, Month(v1.date) as Month, sum(v1.visits) as SumCount 
  FROM visits_table v1 
  group by Year(v1.date), Month(v1.date)
)

你想要的是多年来同一个月不同月份的平均值?同比比较

这将为您提供所需的结果-0.5


为什么是5-3和6-9?我相信上面的查询计算的是所有年份同一月份计数的平均差异。谢谢。如何计算过去6个月当月计数的平均差异,我是否需要添加条件是。添加WHERE子句仅返回所需结果i在下面运行查询显示平均值,但如果过去6个月与上一年重叠,即当前日期为2018/03,如果我每月运行查询以查找过去6个月的平均计数差异,我认为我需要修改WHERE条件,有何建议?cte作为选择年份v1.date作为年份,Monthv1.date为月份,sumv1.Visitions为SumCount从[Visitions_table]v1组按年份v1.date,Monthv1.date从SELECT*中选择AVG diff*1.0,diff=SumCount—从cte d开始按月份顺序按年份在分区上滞后SumCount,其中d.Year=Yeargetdate,d.Month=Monthgetdate-6
; With 
cte as 
(
    SELECT Year(v1.date) as Year, Month(v1.date) as Month, sum(v1.visits) as SumCount 
    FROM   visits_table v1 
    WHERE  v1.date >= DATEADD(MONTH, -6, GETDATE()) -- Add here
    group by Year(v1.date), Month(v1.date)
)
SELECT  AVG (diff * 1.0)
FROM
(
    SELECT  *, diff = SumCount 
                    - LAG (SumCount) OVER (PARTITION BY Month 
                                               ORDER BY Year)
    FROM    cte
) d