2011-11-15 22 views
2

私は5分ごとの最大値を取得するMySQL

+-------------------+------+ 
| Time    | value| 
+-------------------+------+ 
| 2011-2-1 1:01:00 | 10.1 | 
+-------------------+------+ 
| 2011-2-1 1:03:15 | 7.7 | 
+-------------------+------+ 
| 2011-2-1 1:05:21 | 5.4 | 
+-------------------+------+ 
| 2011-2-1 1:06:00 | 2.3 | 
+-------------------+------+ 
| 2011-2-1 1:09:30 | 4.2 | 
+-------------------+------+ 
| 2011-2-1 1:11:10 | 6.2 | 
+-------------------+------+ 

を最大値のための時間を取得します。例えば、最初の5分で

  • は、最大値が第2の5分で10.1

  • あり、最大値は、追加で4.2

あり、Iはまた、希望それぞれの最大値に対応する「時間」を得るのが好きです。

多くのおかげ

答えて

0

SELECT文には、5分間隔でグループにすべての時間を必要とし、その値の最大値を()があります。 MySQLの中で時間をグループ化について

この会談:

http://forums.mysql.com/read.php?20,131939,131955#msg-131955

5分間のグループ化を行うには、5分間unix_timestamp()

と組み合わせてround()機能を使用します。

round(unix_timestamp([time_field])/300) 

あなたの選択は次のようになります(テストされていない):

select 
    round(unix_timestamp([time_field])/300) as Time, 
    max(value) as Value 
from 
    [table_name] 
group by 
    round(unix_timestamp([time_field])/300) 
0

これを行う方法はいくつかあります。ほとんどの時間を動作するはず

ワン:

これは、MySQLは通常、最初に見つかった行をピックアップし、そのグループの光の中で返すという事実に依存
SELECT `Time`,`value` 
FROM (SELECT `Time`,`value` FROM table ORDER BY `value` DESC) t2 
GROUP BY UNIX_TIMESTAMP(`Time`) DIV 300 

。したがって、最初に値で順序付けする内側のクエリは、常に最大の値が最初に見つかるようにします。 (ただし、mysqlオプティマイザは完全に信頼できるものではありません。クエリを別の方法で並べ替えることができるため、どの行を返すべきかを定義していません)。

これでうまくいかない場合は、 -concat trick。

関連する問題