[MySQL] Requête

Requête [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 25-05-2009 à 09:22:36    

Bonjour,
 
Je vous expose mon problème. Je dispose de 2 tables, l'une qui contient des vols (départ, destination, prix) et l'autre qui contient l'historique des prix (départ, destination, prix, date).
Je souhaite trouver les baisses de prix les plus importantes (en %).
 
Pour l'instant, j'effectue cette requête :
 

Code :
  1. SELECT CV.depart, CV.destination, CV.prix AS 'Prix actuel', CVH.prix AS 'Prix historique', CVH.destination,  ((CVH.prix - CV.prix)/CVH.prix)*100 as 'Pourcentage', CVH.dateMaj
  2. FROM cs_CoupleVol CV, cs_CoupleVol_Histo CVH
  3. WHERE CV.prix IS NOT NULL
  4. AND CV.prix !=0
  5. AND CVH.prix IS NOT NULL
  6. AND CVH.prix !=0
  7. AND CV.depart = 'Paris'
  8. AND CV.depart = CVH.depart
  9. AND CV.destination = CVH.destination
  10. order by Pourcentage desc


 
Mais bien évidemment, j'obtiens une ligne pour chaque couple départ/destination de ma table historique qui correspond à ma table vols. Je souhaiterais n'obtenir que la meilleure baisse pour chaque couple.
 
J'ai essayé ce genre de requête :
 

Code :
  1. SELECT CV.depart, CV.destination, CV.prix AS 'Prix actuel', CVH.prix AS 'Prix historique', CVH.destination,  ((CVH.prix - CV.prix)/CVH.prix)*100 as 'Pourcentage', CVH.dateMaj
  2. FROM cs_CoupleVol CV, cs_CoupleVol_Histo CVH
  3. WHERE CV.prix IS NOT NULL
  4. AND CV.prix !=0
  5. AND CVH.prix IS NOT NULL
  6. AND CVH.prix !=0
  7. AND CV.depart = 'Paris'
  8. AND CV.depart = CVH.depart
  9. AND CV.destination = CVH.destination
  10. AND CVH.prix = (select min(prix) from cs_CoupleVol_Histo CVH2 where CVH.id = CVH2.destination and CVH.depart = CVH2.depart)
  11. order by Pourcentage desc


et pas mal d'autres mais ça ne fonctionne pas.
 
Merci d'avance pour votre vaide  :jap:

Reply

Marsh Posté le 25-05-2009 à 09:22:36   

Reply

Marsh Posté le 25-05-2009 à 09:56:06    

perso , je ferai ça :

 


SELECT  depart,destination, MAX(pourcentage)
FROM
(
SELECT CV.depart, CV.destination, CV.prix AS 'Prix actuel', CVH.prix AS 'Prix historique', CVH.destination,  ((CVH.prix - CV.prix)/CVH.prix)*100 as 'Pourcentage', CVH.dateMaj
FROM cs_CoupleVol CV, cs_CoupleVol_Histo CVH
WHERE CV.prix IS NOT NULL
AND CV.prix !=0
AND CVH.prix IS NOT NULL
AND CVH.prix !=0
AND CV.depart = 'Paris'
AND CV.depart = CVH.depart
AND CV.destination = CVH.destination
)
GROUP BY  depart,destination


Message édité par flo850 le 25-05-2009 à 09:56:18

---------------

Reply

Marsh Posté le 25-05-2009 à 10:01:27    

En effet, la requête parait jolie, je ne savais pas qu'on pouvait faire ça :)
 
Néanmoins, j'obtiens ce message :
#1248 - Every derived table must have its own alias  
 
Idée ?

Reply

Marsh Posté le 25-05-2009 à 10:02:33    

SELECT  depart,destination, MAX(pourcentage)
FROM
(
SELECT CV.depart, CV.destination, CV.prix AS 'Prix actuel', CVH.prix AS 'Prix historique', CVH.destination,  ((CVH.prix - CV.prix)/CVH.prix)*100 as 'Pourcentage', CVH.dateMaj
FROM cs_CoupleVol CV, cs_CoupleVol_Histo CVH
WHERE CV.prix IS NOT NULL
AND CV.prix !=0
AND CVH.prix IS NOT NULL
AND CVH.prix !=0
AND CV.depart = 'Paris'
AND CV.depart = CVH.depart
AND CV.destination = CVH.destination
) as maSuperTableDeriveeQuiAUnAliasMaintenant
GROUP BY  depart,destination


---------------

Reply

Marsh Posté le 25-05-2009 à 10:06:14    

Wah :o
Problème résolu donc, merci beaucoup :)

Reply

Sujets relatifs:

Leave a Replay

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