datas 表 userid data rdate 
一些数据如下 
1      43  2009-10-26 16:10:00 
2      34  2009-10-26 16:10:00 
1      43  2009-10-26 16:12:00 
2      34  2009-10-26 16:12:00 
1      342  2009-10-26 16:22:00 
2      233  2009-10-26 16:22:00 
1      0  2009-11-26 16:10:00 
2      0  2009-11-26 16:10:00 
1      43  2009-11-26 16:12:00 
2      34  2009-11-26 16:12:00
1      324  2009-11-26 16:22:00 
2      32  2009-11-26 16:22:00 
这个表数据更新很快,几乎每分钟都有数据现在我想求出2009-10-26至2009-11-26的用量(11-26最晚时间的data-10-26最早时间的data),按理说max(data),min(data),max(data)-min(data),然后group by userid
但在这里不可以这样算,因为data会存在错误的数据,如上面的0等,明显不正确
应该如何改进一下呀

解决方案 »

  1.   

    WHERE data <>0 加个条件
      

  2.   

    就举三条数据,比如吧,
    1      43     2009-12-15 10:10:00 
    1      55555  2010-01-01 09:10:00 //这条数据由于各个原因出错,但是存在的
    1      46     2010-01-15 10:12:00
    一般语句如下select userid,max(data) as a,min(data) as b,max(data)- min(data) as c from datas
    where  rdate between '2009-12-15 10:00:00' and '2010-01-15 10:59:59') group by userid这个SQL求出的是55555-43=55512,是错误的而我应该求出的是46-43=3,这才是正常的
      

  3.   

    可以考虑手动删除
    select data from tb order by data desc
    删除异常数据,简单的逻辑怎么能知道那些数据大得离谱呢?
      

  4.   

    数据量大多,不好删除。谢谢,我考虑取前面和后面一条数据,然后相减算了,要按userid分组,不知这个SQL应该如何写呀
      

  5.   

    能不能先把很离谱的数据先去掉,比如为0的数据,比如大于一个数值【55555】的数据,去掉之后再进行你要的计算,就是加个条件限制 
    select userid,max(data)as a,min(data)as b,max(data)-min(data)as c
    from dataswhere  rdate between'2009-12-15 10:00:00'and'2010-01-15 10:59:59')
    【WHERE data <> 0 AND data < 55555 ......】
    group by userid 
      

  6.   

    那些异常数据就用where条件过滤掉
      

  7.   

    对固定用户(userid),data是否随时间推迟不断变大,data表示什么?