Requete Moyenne journalière d'une Base SQL

Fermé
wonderboutin Messages postés 38 Date d'inscription mardi 10 mars 2009 Statut Membre Dernière intervention 14 octobre 2010 - 23 juin 2010 à 14:53
 fiu - 23 juin 2010 à 22:45
Bonjour,

J'ai une question pour une requete SQL peut-être simple pour vous mais trop complexe pour moi. J'ai une base SQL simple avec 4 champs (DateAndTime, Tag1, Tag2, Tag3). J'ai un enregistrement de une ligne par seconde. Je veux importer la moyenne des donnée de chaque jours. J'utilise la requete (SELECT AVG(Tag1) as MoyTag1,AVG(Tag2) as MoyTag2, AVG(Tag3) as MoyTag3 WHERE DateAndTime > 'Date 00:00:00') AND DateAndTime < 'Date 23:59:59'. De cette façon, j'ai la moyenne des tag à chaque jours. Le problème est que si je veux importer 30 moyennes journalière, je dois le faire 30 fois et si j'utilise une boucle FOR NEXT, la requete ce fais 30 fois et c'est trop long (plus de 2 500 000 000 ligne). Y a t'il une façon de faire une moyenne des données de chaque jours dans la requete ?

Merci beaucoup.



1 réponse

Salut

Si ton SQL te propose une fonction te permettant d'extraire la date de ta colonne DateAndTime, tu peux alors faire
select exractionDate(DateAndTime)
, AVG(Tag1) as MoyTag1
, AVG(Tag2) as MoyTag2
, AVG(Tag3) as MoyTag3
from taTable
where extractionDate(DateAndTime) between convertDate('01/05/2010') and convertDate('31/05/2010')
GROUP BY exractionDate(DateAndTime);


Si tu étais en oracle, extractionDate() serait TRUNC(), convertDate() serait to_date() et ta requete ressemblerait à
select trunc(DateAndTime)
, AVG(Tag1) as MoyTag1
, AVG(Tag2) as MoyTag2
, AVG(Tag3) as MoyTag3
from taTable
where trunc(DateAndTime) between to_date('01/05/2010', 'dd/mm/yyyy') and to_date('31/05/2010', 'dd/mm/yyyy')
GROUP BY trunc(DateAndTime);
0