我在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 小時的平均值.