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

SQL Oracle Discussion :

Récupérer valeur la plus récente de chaque groupe de résultat


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Septembre 2021
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2021
    Messages : 55
    Points : 42
    Points
    42
    Par défaut Récupérer valeur la plus récente de chaque groupe de résultat
    Bonjour à tous,


    Je me casse les dents sur une requête actuellement pour récupérer uniquement la dernière valeur enregistrée pour chaque groupe de résultats.

    Je m'explique avec un schéma. J'ai ce genre de valeurs :
    date 8 analyse A 10
    date 7 analyse A 15
    date 6 analyse C 12
    date 5 analyse A 13
    date 4 analyse B 17
    date 3 analyse A 25
    date 2 analyse B 20
    date 1 analyse C 10
    Je récupère dans ma requête tous les résultats obtenus pour 3 types d'analyses et j'affiche leur date de création de la plus récente à la plus ancienne.



    J'aimerai maintenant améliorer si possible ma requête pour qu'elle ne me sorte que les dernières valeurs pour chaque analyse.

    Voici le résultat attendu :
    date 8 analyse A 10
    date 6 analyse C 12
    date 4 analyse B 17



    Pour info ma requête ressemble actuellement à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT
        date,
        analyse,
        resultat
    FROM
        table_resultats,
        table_analyses,
    WHERE
        analyse in ('analyse A','analyse B','analyse C')
    ORDER BY date DESC
    J'ai tenté d'utiliser GROUP BY sur l'attribut analyse mais sans succès (erreur : n'est pas une expression GROUP BY...).


    Si quelqu'un à une idée merci d'avance,

    Bonne journée

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    La recherche du premier/dernier/plus petit/plus grand est une demande récurrente, escartefigue nous a même fait un petit article sur son blog.

    Tatayo.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2022
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Juin 2022
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Une requête de ce type devrait fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT * FROM (
    SELECT * FROM (SELECT * FROM TEST WHERE (ANALYSE = 'analyse A') ORDER BY DATE DESC) WHERE (ROWNUM = 1)
    UNION
    SELECT * FROM (SELECT * FROM TEST WHERE (ANALYSE = 'analyse B') ORDER BY DATE DESC) WHERE (ROWNUM = 1)
    UNION
    SELECT * FROM (SELECT * FROM TEST WHERE (ANALYSE = 'analyse C') ORDER BY DATE DESC) WHERE (ROWNUM = 1)
    ) ORDER BY DATE DESC
    Bonne journée.

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    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 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Bonjour,

    Il faut utiliser la fonction MAX :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT
        max(date) date,
        analyse,
        max(resultat) keep (dense_rank first order by date desc) resultat
    FROM
        table_resultats,
        table_analyses
    WHERE
        analyse in ('analyse A','analyse B','analyse C')
    GROUP BY analyse	
    ORDER BY date DESC;
    J'ai mis dans ta requête, mais je suppose que c'est juste une simplification, car le mot DATE est un mot réservé, donc ta colonne ne s'appelle pas comme ça, de plus, il manque une jointure entre les tables table_resultats et table_analyses

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/08/2021, 14h01
  2. Réponses: 4
    Dernier message: 27/12/2012, 13h30
  3. Regrouper par la valeur la plus récente
    Par iliak dans le forum Requêtes
    Réponses: 3
    Dernier message: 31/08/2011, 18h50
  4. Afficher la ligne la plus récente de chaque groupement
    Par souma87 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/05/2010, 17h25
  5. [vXIr2] valeur la plus récente d'une table
    Par schkrumble dans le forum Designer
    Réponses: 5
    Dernier message: 02/02/2010, 14h29

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