Requête SQL dernières réf par date

Mangoustine -  
 Niaina -
Bonjour,

J'ai une table de prix contenant 3 rubriques : référence, prix et date de mise en place du prix.
J'aimerais pouvoir récupérer à l'aide d'une (ou plusieurs) requêtes la liste des références sans doublons avec le dernier prix en date. Comment puis-je faire ?

Merci de votre aide
A voir également:

7 réponses

Utilisateur anonyme
 
Avec une requête sql très simple, que tu vas trouver en lisant : https://www.commentcamarche.net/contents/1068-sql-commande-select
0
Mangoustine
 
Merci de ton aide, mais je connais déjà ces commandes. Le problème c'est qu'avec DISTINCT, ça ne marche que si je ne sors qu'une seule rubrique (j'ai bien une liste de réf sans doublons). Or, j'ai besoin de récupérer les 3 rubriques. Par exemple avec ces données :

Produit_1, Prix_1, 01/06/2008
Produit_1, Prix_2, 10/06/2008
Produit_2, Prix_1, 01/06/2008
Produit_2, Prix_2, 10/06/2008
Produit_3, Prix_1, 10/06/2008

J'aimerais récupérer :

Produit_1, Prix_2, 10/06/2008
Produit_2, Prix_2, 10/06/2008
Produit_3, Prix_1, 10/06/2008

Je ne trouve pas comment formuler ma requête...
0
Utilisateur anonyme
 
En gros tu veux récupérer pour chaque produit, les prix les plus récents ?
Dans un premier temps, cherche pour chaque produit la date la plus récente (instruction MAX) ; le format de la date est peut être à revoir (passer par aaaa/mm/jj)
Des indices ici : https://www.developpez.net/forums/d10894/bases-donnees/oracle/sql/sql-trouver-date-maximum-parmis-3-dates-fonction/
0
Mangoustine > Utilisateur anonyme
 
Merci pour tes indications, je ne connaissais pas l'instruction MAX et ça m'a aidé, mais je crois en fait qu'il n'est pas possible de faire ce que je veux en une seule requête.
J'ai fait ça :

select reference, max(datemiseenplace) from pxvente group by reference

Je récupère bien mes réf avec le dernier prix de chacune mais je n'est pas le prix. Si j'aoute le prix au select, je suis forcé de l'ajouter aussi au group by et mes références sont donc en double.

Si tu as une idée pour formuler ça en une seule requête, je suis preneur !
Sinon, encore merci ;)
0
Christounet Messages postés 1266 Statut Membre 1 392
 
Bonjour Mangoustine,

En fait le code suivant devrait faire ce que tu veux
select reference , datemiseenplace, prix from pxvente
where reference||cast(datemiseenplace as char(10))
in
(select reference||cast(max(datemiseenplace) as char(10))
from pxvente
group by reference


Les caractères || servent à concaténer deux colonnes (en Oracle), si tu utilises Sql Server, remplace les par le caractère +, si tu utilise Mysql, le code est alors
select reference , datemiseenplace, prix from pxvente
where concat(reference,cast(datemiseenplace as char(10)))
in
(select concat(reference,cast(max(datemiseenplace) as char(10)))
from pxvente
group by reference


En espérant que cela pourra t'aider.

A plus
0
Mangoustine
 
Merci à tous pour votre aide.
En fait, j'ai dû faire une jointure entre 2 requêtes pour arriver au résultat que je voulais. En effet, la fonction max ne peut être utilisée que dans une instruction SELECT ou HAVING, mais pas dans CONCAT (je travaille sous Windev et c'est ce que le moteur SQL me renvoyait lorsque j'essayais les solutions que vous m'avez proposées).

Merci encore,

Mangoustine
0
Niaina
 
Bonjour,

Est-ce que tu peux me donner ton code ?

Merci
0
Mangoustine
 
Voici le code de ma requête, à adapter suivant tes rubriques :

SELECT

PxVentePackage.Package,
PxVentePackage.PxVenteEuros,
PxVentePackage.[PxVente$] AS PxVenteDollars,
PxVentePackage.DateMiseEnPlace
FROM
PxVentePackage INNER JOIN (SELECT
PxVentePackage.Package AS PackageLu,
MAX(PxVentePackage.DateMiseEnPlace) AS le_maximum_DateMiseEnPlace
FROM
PxVentePackage
GROUP BY
PxVentePackage.Package)
ON (PxVentePackage.DateMiseEnPlace = le_maximum_DateMiseEnPlace)
AND (PxVentePackage.Package = PackageLu)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Niaina
 
Merci beacoup.

Je vais essayer ça et je te dirai des nouvelles.
0
Niaina
 
Windev ne veut pas l'executer. Il n'affiche pas une message d'erreur mais quand je clic sur GO, rien ne se passe.
Quelqu'un a une idée?
0
Niaina
 
Windev ne veut pas l'executer. Il n'affiche pas une message d'erreur mais quand je clic sur GO, rien ne se passe.
Quelqu'un a une idée?

Windev 11
0