在mysql数据库里,这个字段里的时间我是用time类型,那表示的方式是00:00:00 ,那现在有三个值要取平均值,23:01:00 ,23:02:00 00:48:00 当我用time_to_sec把它们转换成秒时00:48分就变成了2880秒,这样的我均值就不准确了,如果才能解决这个00:48这个问题呢?让所谓的平均值在21:00-06:00这个时间段里呢?

解决方案 »

  1.   

    那你这三个值的平均应该是多少呢? avg(23:01:00 ,23:02:00 00:48:00 ) = ??
    还有就是 00:48:00 算多少秒呢?
      

  2.   

    建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
      

  3.   

    一种方法是按照适当条件(如小时小于6)补24小时再计算,
    还有一种是,既然跨天了就连日期一起放进去吧,算了平均值再取时间部分,你可以用datetime也可以用int
      

  4.   

    如果是楼上 jnkc(江南昆虫)  的这种要求,则楼主可以用select avg(time_to_sec(fld)+ if(fld<'06:00:00',86400,0))
      

  5.   

    对于这个问题 楼上 jnkc(江南昆虫)  提出了两种解决方案
    <1>按照适当条件(如小时小于6)补24小时再计算,
    select avg(time_to_sec(fld)+ if(fld <'06:00:00',86400,0))
    这个写法的确很有效<2>还有一种是,既然跨天了就连日期一起放进去吧,算了平均值再取时间部分,你可以用datetime也可以用int
    但是我想问的也正是第二种,因为有的字段是把日期与时间一起记载的(假设时间用的是datetime类型),这样的做法很常见,
    但是你说如果算了平均值再取时间,那该怎么把时间取出来呢?
    如果用java来写这段程序,它会返回一个自1970年1月1日的毫秒数,那这样的话又如何把所要的小时从整个时间里分出来呢?
    还望赐教!
      

  6.   

    id  int(10)
    times timestamp;
    id times
    1       2009-09-30 23:00:00
    2 2009-09-30 00:21:04
    3 2009-09-10 22:12:00结果应该是 2009-09-XX  23:11
    这个XX表示日期,具体日期无关紧要,关键是时间
      

  7.   

    mysql> select * from t_show214;
    +------+---------------------+
    | id   | times               |
    +------+---------------------+
    |    1 | 2009-09-30 23:00:00 |
    |    2 | 2009-09-30 00:21:04 |
    |    3 | 2009-09-10 22:12:00 |
    +------+---------------------+
    3 rows in set (0.00 sec)mysql> select SEC_TO_TIME(avg(TIME_TO_SEC(time(times-interval 6 hour)))+6*60*60) as avg_t from t_show214;
    +----------+
    | avg_t    |
    +----------+
    | 23:11:01 |
    +----------+
    1 row in set (0.00 sec)mysql>