84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
我在mysql中有一个DataTime的timestamp列,还有个rtd的列存储的是float类型数据 DataTime每小时有一条,我需要计算每个小时的24个小时滑动平均值,比如 2号0点的数据是 1号1点到2号0点的24条数据做平均 2号1点的数据是 1号2点到2号1点的24条数据做平均 。。。。。。 以此类推
有办法用一条语句来实现么? 我只知道用循环取24次肯定是可以实现,有办法用一条SQL实现么?
小伙看你根骨奇佳,潜力无限,来学PHP伐。
时间序列数据不适合在SQL中做运算。你应当考虑在程序中运算。
数据库设计中的第一范式:如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。你这个模型中数据跟当前时间存在关联,显然不符合第一范式,不建议存在数据库里面.建议写到 Memcache 里面,然后使用 Cron job 来更新数值.
如果一定要用数据库来实现,也可以不用循环来求平均值的.
SELECT avg(val) as avgVal FROM `table` WHERE `DataTime` < unix_timestamp('2013-12-02 02:00:00') ORDER BY `DataTime` DESC LIMIT 24;
取出来的就是 2013-12-02 02:00:00 过去 24 小时的平均值.
时间序列数据不适合在SQL中做运算。你应当考虑在程序中运算。
数据库设计中的第一范式:如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。你这个模型中数据跟当前时间存在关联,显然不符合第一范式,不建议存在数据库里面.建议写到 Memcache 里面,然后使用 Cron job 来更新数值.
如果一定要用数据库来实现,也可以不用循环来求平均值的.
取出来的就是 2013-12-02 02:00:00 过去 24 小时的平均值.