Requête SQL dernières réf par date
Mangoustine
-
Niaina -
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
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:
- Requête SQL dernières réf par date
- Trier par date excel - Guide
- Jm date avis - Forum Consommation & Internet
- Jm date désabonnement ✓ - Forum Consommation & Internet
- Abonnement jm date - Forum Consommation & Internet
- Logiciel sql - Télécharger - Bases de données
7 réponses
Avec une requête sql très simple, que tu vas trouver en lisant : https://www.commentcamarche.net/contents/1068-sql-commande-select
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...
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...
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/
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/
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 ;)
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 ;)
Bonjour Mangoustine,
En fait le code suivant devrait faire ce que tu veux
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
En espérant que cela pourra t'aider.
A plus
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
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
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
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)
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)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question