[SQL] Requete Group By en prenant les infos du plus petit

Requete Group By en prenant les infos du plus petit [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 29-12-2008 à 17:14:34    

Bonjour
 
J'ai une table  
 

Code :
  1. Produit                     Prix                     Date
  2. Voiture                    1000                    10/08/06
  3. Voiture                    1500                    01/10/06
  4. Camion                    2500                    26/03/08
  5. Voiture                    900                      01/12/08
  6. Camion                    2000                    01/12/08


 
J'aimerais récupérer le prix le plus bas pour chaque produit et la date du prix correspondant
 
J'arrive a récupérer le prix minimum pour chaque produit mais sans la date
 

Code :
  1. Select Produit, min(prix) from Matable group by produit


 
Est ce que c'est possible, parce que je ne vois pas trop ...
 
Merci


Message édité par Lenoiche le 29-12-2008 à 17:37:57
Reply

Marsh Posté le 29-12-2008 à 17:14:34   

Reply

Marsh Posté le 29-12-2008 à 17:20:11    

Select Produit, min(prix), Date from Matable group by produit, date [:petrus dei]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 29-12-2008 à 17:33:22    

Harkonnen a écrit :

Select Produit, min(prix), Date from Matable group by produit, date [:petrus dei]


 
ta requete va me retourne le prix le plus bas pour chaque produit pour CHAQUE DATE
Si j'execute ta requete, elle me retournera dans mon exemple, tout le contenu de la table
 
hors j aimerais juste récupérer  

Code :
  1. Voiture                    900                      01/12/08
  2. Camion                    2000                    01/12/08


Reply

Marsh Posté le 29-12-2008 à 17:52:56    

Salut,
 
Sur SQL Server, j'aurai tenté un truc dans ce genre :  
 
SELECT M1.Produit, M1.Prix, MIN(M1.Date)  
FROM MATABLE M1
INNER JOIN  
 (
 SELECT M2.Produit Pro2, MIN(M2.Prix) Pri2
 FROM MATABLE M2
 GROUP BY M2.Produit
 )
 DRV ON DRV.Pro2 = M1.Produit AND DRV.Pri2 = M1.Prix
GROUP BY M1.Produit, M1.Prix
 
Je n'ai pas d'environnement de test, mais à mon avis tu seras obligé de passer par une sous requete...
 
Ici, on sort donc dans la requête principale le produit, le prix minimum et la date minimum du produit à ce prix, puisque la jointure est faire sur le produit et le prix minimum. Le MIN(Date) permet d'éliminer la possibilité que tu aies plusieurs fois le produit au même prix et que ça retourne n'importe lequel...
 
Je sais que cette syntaxe est à priori valide sous SQL Server,
 
Bon courage,

Reply

Marsh Posté le 29-12-2008 à 19:57:09    

Lenoiche a écrit :

 

ta requete va me retourne le prix le plus bas pour chaque produit pour CHAQUE DATE
Si j'execute ta requete, elle me retournera dans mon exemple, tout le contenu de la table

 

hors j aimerais juste récupérer

Code :
  1. Voiture                    900                      01/12/08
  2. Camion                    2000                    01/12/08




ah oui très juste [:petrus75]
bon alors si la requête de Tibar ne donne rien, essaie ça :

 

SELECT Produit, Date, (SELECT Min(Prix) FROM MaTable M1 WHERE M1.Produit = M2.Produit AND M1.Prix = M2.Prix GROUP BY M1.Produit, M1.Prix) AS Miniprix
FROM MaTable M2

 

pas testé par contre [:petrus75]


Message édité par Harkonnen le 29-12-2008 à 19:58:52

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-12-2008 à 15:13:22    

okay merci les guys
teste la methode de tibar, elle fonctionne nickel
 
:jap:

Reply

Sujets relatifs:

Leave a Replay

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