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 :

SQL MAX (dat_crea)


Sujet :

SQL Oracle

  1. #1
    Membre habitué
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 7
    Par défaut SQL MAX (dat_crea)
    Bonjour,

    J'ai une table avec les champs typ_eng_cod, code_ cs, immat, dat_crea
    Nom : 2020-10-05_16h21_19.png
Affichages : 105
Taille : 7,3 Ko
    J'aimerais pour chaque immatriculation, récupérer les mêmes champs mais uniquement pour la date maximum dat_crea.
    Dès que j'ajoute le cs_cod dans ma requête j'ai plusieurs lignes par immatriculation.
    Comment faire pour garder par immatricumation la ligne avec la date maximum.
    Voir pièce jointe
    Nom : 2020-10-05_16h21_19.png
Affichages : 93
Taille : 11,1 Ko

    A+

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Soit une sous-requête pour récupérer par ligne la date max, soit en utilisant des fonctions analytiques (ex ROW_NUMBER) : https://lalystar.developpez.com/fonc...tiques/#LIII-H

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 175
    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 175
    Par défaut
    Bonjour,

    Vous pouvez en effet utiliser ROW_NUMBER, ou à partir de la 12c la clause match_recognize:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    select *
    from t
    match_recognize
    (partition by immat
     order by dat_crea
     measures l.typ_eng_cod as typ_eng_cod,
              l.code_cs as code_cs,
              l.dat_crea as dat_crea
     
     pattern(l+)
     define l as dat_crea = max(dat_crea)
     );

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    NB au cas où certains voudraient généraliser ce pattern dans un autre contexte :
    ce query ne retournera qu'une seule ligne par max(dat_crea) :
    si plusieurs ont la même date, seule la "dernière" sera retournée et comme le order by ne spécifie que dat_crea, l'ordre (dans la partition) sera aléatoire.

    (et si vous voulez min() il faut que l' "order by" soit DESC)

  5. #5
    Membre habitué
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 7
    Par défaut
    Malheureusement la base n'est pas en 12c

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 175
    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 175
    Par défaut
    Version avec row_number:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    with v as (select typ_eng_cod, code_cs, immat, dat_crea, row_number() over (partition by immat order by dat_crea desc) rn
                  from t
                 )
    select typ_eng_cod, code_cs, immat, dat_crea
    from v
    where rn = 1;

  7. #7
    Membre habitué
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 7
    Par défaut
    Merci vanagreg ça marche nickel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Requete SQL Max ID par magasin
    Par dam28800 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 28/11/2008, 11h36
  2. Requete SQL Max ID par magasin
    Par dam28800 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 28/11/2008, 11h15
  3. [SQL] Max à partir d'un découpage d'une chaine
    Par magicien72 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 19/12/2007, 11h05
  4. requete sql max de sum/sum en gardant les autres infos
    Par gwena54 dans le forum Requêtes
    Réponses: 17
    Dernier message: 27/06/2007, 12h13
  5. [MySQL] requête SQL MAX puis récupération de la valeur
    Par zulot dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/02/2006, 14h17

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