2017-10-12 10 views
0

私は、cpuload、freememory、diskspace、cpu utilization、およびhostname feildsを持つテーブルを持っています。私はすべてのホスト(例:4ホスト)で10分ごとにデータを取得するためにcronジョブを実行しています。 今、データベースに1年間のデータがあります。2か月前にデータベースの時間単位のデータが必要

私はそのデータを時間平均データに変換したいと考えています。しかし、私は2ヶ月前のデータだけが必要です。過去2ヶ月間のデータが乱れてはいけません。 私のデータは2017-10-12 11:00:00

は今、私は2017年8月12日午前11時00分00秒から2017年まで2ヶ月前のデータつまりを取りたい。すなわち、すべての10分のデータが今日まで追加されます。この

hostname    | cpuload | freedisk | freemem |timestamp 
localhost.localdomain | 0.15 | 136052 | 383660 | 2017-08-01 00:10:08 
localhost.localdomain | 0.03 | 136492 | 383660 | 2017-08-01 00:20:08 
localhost.localdomain | 0.01 | 133456 | 383660 | 2017-08-01 00:30:08 
localhost.localdomain | 0.10 | 64544  | 383660 | 2017-08-01 00:40:08 
localhost.localdomain | 0.01 | 68148  | 383660 | 2017-08-01 01:00:08 

のようなものです私は時間ごとのデータ

SELECT Avg(CpuLoad) AS avgcpuload 
    ,Avg(FreeMemory) AS avgfreemem 
    ,Avg(FreeDisk) AS avgfreedisk 
    ,Avg(Cpu_util) AS avgcpuutil 
FROM Dynamic_Host_Information; 

に変換する必要があり-08-01 0時00分00秒のデータは、私がavgを得たが、私は戻って2ヶ月のデータのためにそれをしたいです。

私を助けてください。事前 サーガルレディで おかげで

+0

を確認することができますあなたはそれとして、そのちょうど 'avg'前に、前の2ヶ月のデータを取得したいですか?いくつかのサンプルデータと希望する出力を親切に共有してください。 – zarruq

+0

最初にデータの2ヶ月前に取得し、平均10分のデータを毎時平均(データの2ヶ月前の2ヶ月のデータではなく2ヶ月前)にしたい。 –

+0

過去2ヶ月のデータ。わかった。 「平均10分のデータを平均して毎時」という文句はありません。サンプルデータと望ましい出力を親切に共有して、私たちがあなたを助けるのを助けてください。 – zarruq

答えて

1

1つの方法は、望ましい結果を得るために、以下のように、以前の2ヶ月のデータを除外するwhere句と一緒にあなたのtimestamp列のdate and hour only一部でgroup by自分のデータである可能性があります。

SELECT t1.hostname 
    ,avg(cpuload) AS cpuload 
    ,avg(freedisk) AS freedisk 
    ,avg(freemem) AS freemem 
FROM table1 t1 
WHERE t1.TIMESTAMP < current_timestamp - interval '42' day 
GROUP BY date_format(t1.TIMESTAMP, '%Y%m%d%H'); 

INTERVAL '42' DAYOctSepデータを除外するために使用されます。それに応じて調整することができます。

結果:

hostname    cpuload  freedisk  freemem 
------------------------------------------------------------- 
localhost.localdomain 0.072500 117636.0000 383660.0000 
localhost.localdomain 0.010000 68148.0000 383660.0000 

アップデート1:

あなたが質問で述べた期間のデータが必要な場合

SELECT t1.hostname 
    ,avg(cpuload) AS cpuload 
    ,avg(freedisk) AS freedisk 
    ,avg(freemem) AS freemem 
FROM table1 t1 
WHERE t1.TIMESTAMP between '2017-08-01 00:00:00' and '2017-08-12 11:00:00' 
GROUP BY date_format(t1.TIMESTAMP, '%Y%m%d%H'); 

あなたはデモにhere

+0

zarruqありがとうございました。私は同じことについてもう少し助けが必要です。試してみると申し訳ありません。私はこのデータベースが初めてです。ここでは、同じテーブルに結果を挿入し、2か月前のデータを削除して操作を行ったかったとします。助けてもらえますか –

+0

現在の質問を参考にして別の質問をしてください。私たちはあなたを助けてくれることをうれしく思います。ありがとう!:-) – zarruq

+0

ありがとうzarruq :) –

関連する問題