Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1613 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Optimisation de requête imbriquée

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Optimisation de requête imbriquée

n°1941475
Profil sup​primé
Posté le 17-11-2009 à 10:35:01  answer
 

Bonjour,  
je suis  loin d'être un expert en SQL. Je désire optimiser  une requête pour que celle ci soit plus rapide:
 
Ma table "event" se compose ainsi:
Tag   |              Valeur                  |       DateEvent  
Elle est remplie d'enregistrement datés.
 
Je recherche le dernier enregistrement précédant une date précise pour une liste de variable (Tag) prédéfinie.
 
Pour l'instant j'exécute cette requête pour chaque Tag . Mais j'aimerai réduire son temps d'exécution
SELECT Valeur FROM event WHERE Tag ='%1' AND DateEvent =  (Select  Max(DateEvent ) FROM event  Where Tag ='%1' AND DateEvent  < '%2' )
 
%1 est le nom d'un Tag
%2 est la Date limite
 
Je pense que le plus rapide serait de réaliser une seule requête qui sortirait une table Tag, Valeur mais je ne vois pas bien comment réaliser cela. C'est pourquoi je demand votre aide sur ce point
 
Je travaille sur une Base SQL server via ODBC
 
Merci d'avance
 
g,
 
 
EDIT: Un début de réponse ici: je creuse Bon j'ai un début de piste ici:
http://www.techonthenet.com/sql/max.php


Message édité par Profil supprimé le 17-11-2009 à 11:23:06
mood
Publicité
Posté le 17-11-2009 à 10:35:01  profilanswer
 

n°1941549
Fred999
Rabat-joie
Posté le 17-11-2009 à 13:23:06  profilanswer
 

Salut,

 

select valeur
from event
where tag = '%1'
and DateEvent < '%2'
group by tag
having DateEvent = max(DateEvent)

 

C'est la clause HAVING qui te permet de n'obtenir que la ligne voulue.


Message édité par Fred999 le 17-11-2009 à 13:23:15
n°1941565
Profil sup​primé
Posté le 17-11-2009 à 14:00:57  answer
 

Merci Fred 999 pour ta réponse, mais je pense que l'idéal c'est de recuperer une liste avec tous les TAGS sinon je dois faire autant de requete qu'il y a de tags (et y'en a un certain nombre)....
Le group by est bien la solution que j'ai implémentée ainsi  
 
SELECT EDB.tagname,EDB.valuestring,EDB. DateEvent
FROM event as EDB,  
Select  Max(DateEvent) as MaxDate, tag
FROM eventdbww WHERE  DateEvent < '%2' GROUP BY tag HAVING tag IN (%1) )  maxresults
WHERE EDB.tag=maxresults.tag AND EDB.DateEvent =maxresults.MaxDate
 
Pour ton exemple , je crois que tu ne peux utiliser dans le having qu'une clause se reportant au champs mentionné dans le GROUP BY (En fait chez moi ca fait une erreur ton code.

n°1941607
Fred999
Rabat-joie
Posté le 17-11-2009 à 15:08:56  profilanswer
 

ah tu veux tous les tags d'un coup ?

 

select valeur, max(DateEvent)
from event
where DateEvent < '%2'
group by tag
having DateEvent = max(DateEvent)

 

si tu ne veux qu'une liste de tags, fais un tag in (liste), je pense que ce sera + rapide que ton select imbriqué


Message édité par Fred999 le 17-11-2009 à 15:09:34
n°1941663
rufo
Pas me confondre avec Lycos!
Posté le 17-11-2009 à 17:04:34  profilanswer
 

euh, faut pas le champ "tag" dans le select pour que la clause group by fonctionne :??:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1941664
Fred999
Rabat-joie
Posté le 17-11-2009 à 17:14:28  profilanswer
 

Chez moi ça marche comme ça (en transact-sql), j'avoue que c'est pas très joli comme code :c


Message édité par Fred999 le 17-11-2009 à 17:14:47

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Optimisation de requête imbriquée

 

Sujets relatifs
Requete hierarchiquerequete SQL avec effacement du fichier concerné ?
Requête sql avec jointure?[RESOLU]Requête SQL: Afficher Gratuit/Payant en une seule fois
[RESOLU]Plusieurs requetes SQL en une seul sous forme de tableauRequête multi jointures et regroupement
JSF/JSP/Servlet : Impression sur requête HTTPProblème grosse requête PHP !
affichage des résultats d'une requête SQL 
Plus de sujets relatifs à : Optimisation de requête imbriquée


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR