Création vue, fonctions d'agrégation
Bonjour,
étant données deux tables, disons :
Table1 : horodatage (date), valeur1 (nombre), valeur2(nombre)...
Table2 : horodatage(date), valeur3(nombre)
où les colonnes 'horodatage' sont indexées et uniques, mais avec des valeurs différentes pour les deux tables (jamais Table1.horodatage = Table2.horodatage), je dois créer une vue où doivent figurer toutes les colonnes de Table1 + la moyenne des valeur3 de Table2, quand Table2.horodatage est à 5minutes près de Table1.horodatage. Il ne doit y avoir qu'une ligne renvoyée pour chaque Table1.horodatage...
Pour le moment j'ai ça :
Code:
1 2 3 4 5
|
SELECT Table1.horodatage, valeur1, valeur2, AVG(valeur3)
FROM Table1, Table2
WHERE Table2.horodatage BETWEEN (Table1.horodatage - interval '5' minute) and (Table1.horodatage + interval '5' minute)
GROUP BY Table1.horodatage, valeur1, valeur2 |
et j'hésite avec ça :
Code:
1 2 3 4 5 6
|
SELECT horodatage, valeur1, valeur2, (SELECT AVG(valeur3)
FROM Table2
WHERE Table2.horodatage
BETWEEN (Table1.horodatage - interval '5' minute) AND (Table1 .horodatage + interval '5' minute)
FROM Table1 |
Questions :
-est-ce que les requêtes ci-dessus sont correctes, si oui laquelle est la mieux ?
-y-a-t-il un meilleur moyen de faire ? La véritable requête comporte plusieurs dizaines de colonnes dans chaque table, et des centaines de milliers de lignes sont stockées dans la base... Donc je vous raconte pas le temps que ça prend (une fois la vue créée, je doit récupérer les données en filtrant selon une fenêtre de dates).
Merci pour vos lumières...