2017-10-12 7 views
0

J'ai une table avec cpuload, libememory, diskspace, utilisation de CPU et feilds de nom d'hôte. Je cours un travail de cron pour obtenir les données pour toutes les 10 minutes dans tous les hôtes (ex: 4 hôtes). Maintenant, j'ai des données d'un an dans la base de données.besoin de données de base de données par heure avant deux mois

Je veux convertir ces données en données horaires moyennes. mais j'ai besoin seulement pour les données qui sont avant deux mois. les données des deux derniers mois ne devraient pas déranger. mes données est comme ce

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 

toutes les données 10 minutes ajouteront jusqu'à aujourd'hui à savoir 2017-10-12 11:00:00

maintenant je veux prendre deux mois des données soit de 12/08/2017 11:00:00 à 2017 -08-01 00:00:00 données i besoin de convertir les données horaires

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

i got avg mais je veux pendant deux mois en arrière données seulement.

aidez-moi s'il vous plaît. merci à l'avance Sagar reddy

+0

Voulez-vous récupérer des données 2 mois précédents et comme avant que tout 'avg'? veuillez partager quelques exemples de données et la sortie désirée. – zarruq

+0

d'abord, je veux obtenir 2 mois avant les données et avg 10 minutes de données à la moyenne horaire (2 mois avant les données, pas les données des 2 mois précédents). –

+0

Données précédentes sur 2 mois. je l'ai. mais 'avg 10 mins data to hourly average' je n'obtiens pas cette phrase. Pouvez-vous partager des exemples de données et la sortie désirée pour nous aider à vous aider. – zarruq

Répondre

1

Une façon pourrait être de group by vos données par date and hour only partie de votre colonne timestamp avec une clause where pour exclure les données antérieures 2 mois comme ci-dessous pour obtenir le résultat souhaité.

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' DAY est utilisé pour exclure Oct et Sep données. Vous pouvez l'ajuster en conséquence.

Résultat:

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

Mise à jour 1:

Si vous avez besoin de données pour la période mentionnée en question.

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'); 

Vous pouvez vérifier la démo here

+0

Merci zarruq. J'ai besoin de plus d'aide sur la même chose. désolé de demander sans essayer. Je suis nouveau dans cette base de données. Ici, je veux insérer les résultats à la même table et supprimer les données il y a 2 mois où nous avons fait l'opération. Pouvez-vous m'aider? –

+0

Veuillez poser une autre question en vous référant à la question en cours. Nous serons ravis de vous aider. Merci!:-) – zarruq

+0

Merci beaucoup zarruq :) –