0

MYSQL に問題があります。2 つの特定の時間の間のデータを 5 分ごとに減算し、5 分間のデータを平均化する必要があります。私が今していることは次のとおりです。

select (avg(columnname)),convert((min(datetime) div 500)*500, datetime) + INTERVAL 5 minute as endOfInterval 
from Databasename.Tablename 
where datetime BETWEEN '2012-09-12 10:50:00' AND '2012-09-12 14:50:00' 
group by datetime div 500;

累積平均です。11 時に 500 を取得し、11.05 に 700 を取得するとします。必要な平均は (700-500)/5 = 40 です。しかし、現在は (500+700)/5 = 240 を取得しています。累積平均は必要ありません。 . 親切に私を助けてください。

4

1 に答える 1

0

あなたが話している平均の種類については、句を使用して複数の行を集計したくありません。代わりに、同じテーブルからGROUP BY正確に2 つの異なる行を使用して結果を計算する必要があります。これは、自己結合を呼び出します。

SELECT (b.columnname - a.columnname)/5, a.datetime, b.datetime
FROM Database.Tablename a, Database.Tablename b
WHERE b.datetime = a.datetime + INTERVAL 5 MINUTE
  AND a.datetime BETWEEN '2012-09-12 10:50:00' AND '2012-09-12 14:45:00'

ab同じテーブルの 2 つの異なる行を参照します。このWHERE句は、それらが正確に 5 分離れていることを保証します。

その時間的距離に一致する 2 番目の列がない場合、結果の行はクエリ結果に含まれません。テーブルに正確に 5 分ごとのデータ ポイントがなく、代わりに適切なパートナーを検索する必要がある場合、事態はさらに困難になります。この回答は、おそらくそのユースケースに合わせて調整される可能性があります。または、データベース サーバーではなく、アプリケーション レベルでこれを実装することもできます。

于 2012-09-18T14:42:23.247 に答える