cs_Tipo
Messages postés82Date d'inscriptiondimanche 2 novembre 2003StatutMembreDernière intervention13 avril 2017
-
4 avril 2005 à 11:34
cs_Tipo
Messages postés82Date d'inscriptiondimanche 2 novembre 2003StatutMembreDernière intervention13 avril 2017
-
8 avril 2005 à 13:02
Bonjour,
j'ai besoin de sélectionner dans une table de relevés, les enregistrements pour lesquels la date est la plus récente, et seulement si un abonnement est actif. J'ai donc écrit ceci :
SELECT id_releve,releves.id_abonnement,releves.id_compteur,souscriptions.ref_abonne,
abonnes.nom_abonne,releves.date_releve,releves.index_releve,releves.nouv_index,
releves.nouv_date
FROM releves INNER JOIN (souscriptions INNER JOIN abonnes ON souscriptions.ref_abonne=abonnes.ref_abonne) ON souscriptions.ref_abonnement=releves.id_abonnement
WHERE date_releve=(SELECT MAX(date_releve) FROM releves WHERE releves.id_abonnement=souscriptions.ref_abonnement)
AND souscriptions.date_fin is null ORDER BY 1;
Le problème est que ma table de relevés contient + de 6000 enregistrements et qu'il faut plus de 30 secondes pour exécuter la requête (sur un P4-3Ghz)
Quelqu'un connaitrait-il un moyen d'optimiser ce code ? Merci d'avance pour vos idées...
cs_Tipo
Messages postés82Date d'inscriptiondimanche 2 novembre 2003StatutMembreDernière intervention13 avril 20171 8 avril 2005 à 13:02
Bonjour,
Merci pour ta réponse mais j'ai déjà résolu le problème, avec comme tu le proposes, l'ajout d'un champ booléen qui indique le dernier relevé.
J'ai donc exécuté une seule fois la longue requête en faisant un update sur le booléen.
C'est effectivement tellement simple que je n'y avais pas pensé...