时间平均化的问题 在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这个时间段里呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 那你这三个值的平均应该是多少呢? avg(23:01:00 ,23:02:00 00:48:00 ) = ??还有就是 00:48:00 算多少秒呢? 建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。当您的问题得到解答后请及时结贴.http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html 一种方法是按照适当条件(如小时小于6)补24小时再计算,还有一种是,既然跨天了就连日期一起放进去吧,算了平均值再取时间部分,你可以用datetime也可以用int 如果是楼上 jnkc(江南昆虫) 的这种要求,则楼主可以用select avg(time_to_sec(fld)+ if(fld<'06:00:00',86400,0)) 对于这个问题 楼上 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日的毫秒数,那这样的话又如何把所要的小时从整个时间里分出来呢?还望赐教! id int(10)times timestamp;id times1 2009-09-30 23:00:002 2009-09-30 00:21:043 2009-09-10 22:12:00结果应该是 2009-09-XX 23:11这个XX表示日期,具体日期无关紧要,关键是时间 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> 不关闭服务情况下,给一表加字段时, 注意事项? 求高手一SQL语句,不知道能不能实现!! 关于Mysql的TimeOut问题 新手问题--远程下载后的备份数据(mysql)如何导入. 这句oracle的分组排序查询如何改写成postgreSQL select a+b from tbc 其中 a 和 b 都是 varchar类型的,这样的sql在pg里怎么写 问一个Sql语句 高分请教mysql网络服务器模型是什么样子的? 请教mysql中text类型的列的值过长的问题 关于mysql的缓存更新 表缓存如何优化? [菜鸟问题]文本方式插入记录出现异常,如何解决
还有就是 00:48:00 算多少秒呢?
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
还有一种是,既然跨天了就连日期一起放进去吧,算了平均值再取时间部分,你可以用datetime也可以用int
<1>按照适当条件(如小时小于6)补24小时再计算,
select avg(time_to_sec(fld)+ if(fld <'06:00:00',86400,0))
这个写法的确很有效<2>还有一种是,既然跨天了就连日期一起放进去吧,算了平均值再取时间部分,你可以用datetime也可以用int
但是我想问的也正是第二种,因为有的字段是把日期与时间一起记载的(假设时间用的是datetime类型),这样的做法很常见,
但是你说如果算了平均值再取时间,那该怎么把时间取出来呢?
如果用java来写这段程序,它会返回一个自1970年1月1日的毫秒数,那这样的话又如何把所要的小时从整个时间里分出来呢?
还望赐教!
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表示日期,具体日期无关紧要,关键是时间
+------+---------------------+
| 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>