我现在有一个数据库,里面存储的是实时数据,每1s插入一条数据,
  现在要做的就是,能计算出平均值来,分别是全部值的平均值,最近5min,10min和15min的平均值来
然后显示出来
不知道该如何是好,高手求教啊

解决方案 »

  1.   

    可以建个临时表,记录均值,然后建个触发器,当插入数据后触发,在这个触发器中算出均值并将结果记入到(update就可以)临时表中,最后显示这个临时表中的数据不就 OK了 。
      

  2.   

    写sql语句啊,每条记录里面总有一个字段记录插入时间的吧?
    select avg(...) as ... from ... where datediff(mi, 时间字段, getdate()) <= 5 //5分钟内
      

  3.   

    不是
     我只要每过5min钟计算一次
      

  4.   

    你的数据表里应该有记录时间的字段吧,这样的话按时间排序,然后用top 15来取得最近的15条记录.你也可以用存储过程里加游标来实现计算,最后返回结果集,也可以直接返回结果集在程序里计算显示.虽然top+order by方法可以得到这15条记录,但如果直接用一条sql的话可能还是有点难度,但我觉得应该可以用一个sql实现,没时间去想,有时间你可以自己去想想看.
      

  5.   

    看错了,15分钟应该是top 90
      

  6.   

    但是我每过5min 都要更新的啊
        将以前显示的5min,10min,15MIN,全部平均值都地更新
      

  7.   

    如果说重复计算会影响效率,那就用临时表,在存储过程中把计算结果写入临时表,临时表里无数据时计算前15分钟的各个平均,一条数据时计算前10分钟的两个平均,2条时只计算最近5分钟的平均,当然临时表也要根据时间或递增的编号来排序,2条记录时可以删除最老的那条数据.临时表在连接不断开的情况会一直保留,全局临时表可以保留到服务重启为止(ms sql server)不建议使用触发器,因为以这种写数据的速度,用触发器将不比每次重新计算效率高,而且日志将会不断增大.