[MySQL] Probléme sur requete pas simple !

Probléme sur requete pas simple ! [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 31-08-2006 à 10:10:32    

Bonjour.
 
Au premier a bord, ce que je demande parait simple. Mais aprés avoir demandé a 3 personnes, personne ne trouve !
 
Tout d'abord, la structure de ma table :
 
    T_Sondages
---------------
PK | id (int)
FK | magasin (int)
    | date (timestamp en int)
 
 
J'aurai donc besoin de selectionner UNIQUEMENT l'id (puisque ce resultat sera utilisé comme sous requete).
Les contraintes :
 
- SELECTIONNER un sondage par magasin
- Si il y'a plusieurs sondage par magasin, selectionner UNIQUEMENT le sondage le plus ancien (en fonction de la date donc).
 
Ca parait simple au premier abord, mais ce ne l'ai pas, surtout a cause de cette derniéres contraintes !
 
 
Donc si une ame charitable était prête à m'aider, je lui en serai trés reconnaissant :D
 
Merci d'avance.

Reply

Marsh Posté le 31-08-2006 à 10:10:32   

Reply

Marsh Posté le 31-08-2006 à 10:20:02    

Essayer

SELECT s1.id
  FROM T_Sondages s1
 WHERE s1.date IN
 (SELECT MAX(s2.date)
    FROM T_Sondages s2
   WHERE s2.magasin = s1.magasin)


Edit : La requête de Betsamee devrait marcher aussi et est peut-être plus performante que la mienne.


Message édité par olivthill le 31-08-2006 à 10:27:29
Reply

Marsh Posté le 31-08-2006 à 10:20:20    

Code :
  1. SELECT A.id
  2. FROM
  3. (
  4. SELECT T1.id,T1.magasin,MAX(T1.DATE)
  5. FROM T_Sondage T1,T_Sondage T2
  6. WHERE T1.DATE IN (SELECT MAX(DATE) FROM  T_Sondage T2 GROUP by magasin) AND T1.magasin = T2.magasin
  7. GROUP by T1.id,T1.magasin
  8. ORDER BY T1.magasin,T1.DATE DESC
  9. )A


Message édité par betsamee le 31-08-2006 à 11:05:41
Reply

Marsh Posté le 31-08-2006 à 10:23:30    

Quel rapidité !
Merci beaucoup pour votre aide :)
 
La réponse de olivthill semble fonctionner :)

Reply

Marsh Posté le 31-08-2006 à 10:25:09    

energiez a écrit :

Quel rapidité !
Merci beaucoup pour votre aide :)
 
La réponse de olivthill semble fonctionner :)


j ai edite la mienne qui fonctionne aussi (petite erreur dans le group by)

Reply

Marsh Posté le 31-08-2006 à 10:32:27    

Je veins de tester la tienne.
 
Elle ne renvoie pas les lignes souhaité. Elle renvoie bien une ligne par magasin, mais ne renvoie pas le DERNIER sondage.
 
Mais merci tout de même pour ton aide :D
Comme ca je vois plein de maniére différent de faire :)

Reply

Marsh Posté le 31-08-2006 à 10:36:30    

energiez a écrit :

Je veins de tester la tienne.
 
Elle ne renvoie pas les lignes souhaité. Elle renvoie bien une ligne par magasin, mais ne renvoie pas le DERNIER sondage.
 
Mais merci tout de même pour ton aide :D
Comme ca je vois plein de maniére différent de faire :)


[:ddr555]
je vais regarder ce qui cloche
 
EDIT : mais ma requette marche tres bien  :D


Message édité par betsamee le 31-08-2006 à 11:05:30
Reply

Marsh Posté le 31-08-2006 à 10:43:24    

je crois savoir, car j'avais deja essayer avec le MAX.
 
En fait, si on fait un select MAX, ca affiche bien la valeur maxi, mais ca ne selectionne pas la ligne concerné ! Du moins je crois :|

Reply

Marsh Posté le 31-08-2006 à 10:45:50    

c'est ce qui semble :-(

Reply

Marsh Posté le 31-08-2006 à 11:04:46    

Une autre solution qui devrait marcher et qui n'est qu'une variante de celle de olivthill ;) !
 

Code :
  1. SELECT Id
  2. FROM T_Sondages
  3. WHERE (magasin, date) IN(
  4. SELECT magasin, MAX(date)
  5. FROM T_Sondages
  6. GROUP BY magasin);

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed