IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Récupération de la valeur la plus récente


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2024
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2024
    Messages : 17
    Par défaut Récupération de la valeur la plus récente
    Bonjour

    J'ai une table contenant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Val1          Val2         val3
    141           1             01.01.2019
    141           2             01.01.2020
    142           1             01.01.2017
    142           1             01.01.2019
    142           1             01.01.2024
    143           2             01.01.2019
    143           2             01.01.2020
    143           2             01.01.2018

    Et j'essaye de récupérér la valeur la plus récente avec cette querry mais je pense mal m'y prendre car je n'obtiens pas les bonnes lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select ta.val1, ta.val2
    from tableA ta 
    group by ta.val3
    having ta.val1 in (141,142,143,144,145,146,147,148,149)
    and ta.id = (select id from tableB tb  where tb.code = '123456789')
    order by  ta.val1 asc, ta.val2 desc;
    Le résultat attendu est celui ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Val1          Val2         val3
    141           2             01.01.2020
    142           1             01.01.2024
    143           2             01.01.2020

    D'avance merci pour votre aide

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Bonjour ,

    C'est un problème classique en SQL, déjà résolu de nombreuses fois sur ce forum.
    Un billet de blog lui a même été consacré : Sélectionner la ligne la plus récente pour un critère.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 350
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 350
    Billets dans le blog
    17
    Par défaut
    Récupérer le dernier val2 (selon val3) par val1 :

    select all val1, val2, val3
    from tableA as o
    where not exists (
        select all *
        from tableA
        where val1 = o.val1 and val3 > o.val3
    );
    Je suppose que tes dates sont bien au format yyyy-mm-dd et non dd.mm.yyyy. Si tel n'est pas le cas il faudra les convertir.

  4. #4
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2024
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2024
    Messages : 17
    Par défaut
    Désolé mais aucunes des solutions proposées ne fonctionnent.

    La demande est de trouver pour chaque valeur de la colonne Val1, la date la plus récente (colonne val3) et de récupérer la valeur de la colonne Val2.

    Dans ce cas de figure

    Pour Val1 = 141 , la date la plus récente est 01.01.2020 et donc je récupère la valeur val2 = 2
    Pour Val1 = 142 , la date la plus récente est 01.01.2024 et donc je récupère la valeur val2 = 1
    Pour Val1 = 143 , la date la plus récente est 01.01.2020 et donc je récupère la valeur val2 = 2
    etc ...

    Peut etre cette explication vous parlera plus clairement

    Merci pour votre aide

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 176
    Par défaut
    Bonjour,

    Quelle est ta BDD?

    Sur Oracle il suffit de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select ta.val1, max(ta.val2) keep (dense_rank last order by ta.val3), max(ta.val3)
    from tableA ta 
    group by ta.val3
    having ta.val1 in (141,142,143,144,145,146,147,148,149)
    and ta.id = (select id from tableB tb  where tb.code = '123456789')
    group by ta.val1
    order by  ta.val1 asc, ta.val2 desc;

  6. #6
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2024
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2024
    Messages : 17
    Par défaut
    La DB est Sybase

    désolé pour cet oubli

  7. #7
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 350
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 350
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par Stef67 Voir le message
    Désolé mais aucunes des solutions proposées ne fonctionnent.
    Ma proposition fonctionne si tes dates sont correctement typées (je n'ose pas imaginer le contraire).

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 637
    Billets dans le blog
    10
    Par défaut
    Comme indiqué par al1__24, les différentes solutions proposées dans mon blog ICI sont toutes opérationnelles, et elles correspondent toutes exactement au besoin.
    Encore faut-il, comme l'a demandé Séb., que les dates soient bien de type date...

Discussions similaires

  1. Déterminer la Valeur la plus grande dans une table
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 9
    Dernier message: 22/08/2014, 23h35
  2. [Oracle] selectionner la valeur la plus proche
    Par jaoued dans le forum Langage SQL
    Réponses: 5
    Dernier message: 08/03/2006, 21h15
  3. Comparer une valeur à plus ou moins quelque chose...?
    Par Thierry8 dans le forum Langage
    Réponses: 4
    Dernier message: 11/10/2005, 13h17
  4. Permuter des valeurs, le plus rapidement possible?
    Par danje dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 27/09/2005, 21h51
  5. Récupurer via une requête SQL la valeur la plus proche
    Par yoda_style dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/04/2004, 13h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo