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 :
et j'hésite avec ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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...
Partager