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

7 réponses

  1. 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
  2. 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
    1. 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
      1. 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
  3. Christounet Messages postés 1272 Date d'inscription   Statut Membre Dernière intervention   1 393
     
    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
    1. 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
  4. Niaina
     
    Bonjour,

    Est-ce que tu peux me donner ton code ?

    Merci
    0
    1. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Niaina
     
    Merci beacoup.

    Je vais essayer ça et je te dirai des nouvelles.
    0
  7. 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
  8. 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