有个表 结构这个
域名,
当日排名,
日期,
十五天平均排名,
三十天平均排名,
六十天平均排名,
一百八十天平均排名,
三百六十天平均排名也就是统计 100 万 域名的排名,每天导入100万的域名数据,然后计算出排名,主要语句,也就是 AVG 平均排名,
现在每天需要计算 各种平均排名,因为数据量很大,计算很缓慢,求大神优化

解决方案 »

  1.   

    计算过程是这样的,比如今日,我就用游标 查询 100万 今天的数据,
    然后,进行计算,

    取 15 天平均排名
    select @averagerating = (case when avg(排名) is null then  @ranking else avg(排名) end) from Alexa表 where 域名= @域名 and CONVERT(varchar(10),日期,23) >= Convert(varchar(12),dateadd(day,-14,@date),23) and CONVERT(varchar(10),日期,23) <
    = Convert(varchar(10),@date,23)  --15天平均排名  然后更新到今天的数据中
      

  2.   

    你这完全可以用case when 、sum、avg这些来一次性计算出来吧。重点还是要看你的排名是要怎么算。
      

  3.   

    1, 在域名、排名 和 日期建立索引
    2,不要使用游标
    3,此类用一句case SQL可以查询出来的,比如计算15天内,
    select   avg(排名) as ranking from Alexa表 where 域名= @域名 and  (日期-getdate())>14