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ération sans doublon


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant
    Inscrit en
    Mars 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 22
    Par défaut Récupération sans doublon
    Bonjour à tous,

    J'ai dans un table "RA" une colonne ID. Ici ID est unique

    Dans une seconde table "ASG" une colonne ID dans laquelle on retrouve l'ID de la table RA mais que l'on peut retrouver plusieurs fois..
    On a aussi un autre champ stamp qui est une date.

    Ex:
    dans table RA :
    ID000001
    ID000002
    ID000003
    ...

    dans table ASG :
    ----ID-----------------Stamp
    ID000001- - - - - - - 2011/01/20
    ID000001- - - - - - - 2010/12/21
    ID000002- - - - - - - 2010/03/15
    ID000003- - - - - - - 2010/07/08
    ID000003- - - - - - - 2010/07/12
    ID000003- - - - - - - 2010/08/11


    Ma question :
    Comment retourner les ID de la table RA (+ d'autres champs) en faisant une jointure sur la table ASG (par ID) et en ne retournant que les lignes dont la date est la plus "jeune".

    NOTA : Stamp ne fait pas partie des champs retournés mais uniquement utilisé dans la clause WHERE.

    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Avec la fonction row_number :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    With ASG as -- Vos données
    (  
    select 'ID000001' as ID_RA, date '2011-01-20' as STAMP from dual union all
    select 'ID000001'         , date '2010-12-21'          from dual union all
    select 'ID000002'         , date '2010-03-15'          from dual union all
    select 'ID000003'         , date '2010-07-08'          from dual union all
    select 'ID000003'         , date '2010-07-12'          from dual union all
    select 'ID000003'         , date '2010-08-11'          from dual
    )
      ,  SR as
    (
    select id_ra, stamp,
           row_number() over(partition by id_ra order by stamp desc) as rn
      from asg
    )
    select id_ra, stamp
      from SR
     where rn = 1;
     
    ID_RA    STAMP     
    -------- ----------
    ID000001 2011-01-20
    ID000002 2010-03-15
    ID000003 2010-08-11
    Edit : Une précision quand même : l'utilité de la fonction de fenêtrage n'est avérée qu'en fonction des autres colonnes dont vous allez avoir besoin, peut-être qu'un simple agrégat aurait suffit.

  3. #3
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DISTINCT ID, FIRST_VALUE (STAMP)  OVER (PARTITION BY ID ORDER BY STAMP DESC) FROM RA

  4. #4
    Membre averti
    Homme Profil pro
    Consultant
    Inscrit en
    Mars 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 22
    Par défaut
    Merci pour ces réponses.

    Dans les 2 cas apparemment je suis obligé de sélectionner le champ stamp dans le SELECT or ce n'est pas une info voulue comme retournée.

    Ai-je vraiment le choix si je souhaite parvenir au résultat escompté ?

    Merci

  5. #5
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    ca change le besoin !
    Donne un exemple de ce que tu veux avoir !
    Un seul id (correspondant au 'STAMP' le plus récent ) ?

  6. #6
    Membre averti
    Homme Profil pro
    Consultant
    Inscrit en
    Mars 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 22
    Par défaut
    Oui c'est ça.
    Je souhaite récupérer l'ID dont le STAMP est le plus récent.

    Dans mon exemple initial ça donnerait :

    dans table RA :
    ID000001
    ID000002
    ID000003
    ...

    dans table ASG :
    ----ID-----------------Stamp
    ID000001- - - - - - - 2011/01/20
    ID000001- - - - - - - 2010/12/21
    ID000002- - - - - - - 2010/03/15
    ID000003- - - - - - - 2010/07/08
    ID000003- - - - - - - 2010/07/12
    ID000003- - - - - - - 2010/08/11

    résultat attendu :
    ID000001- - - - - - - 2011/01/20
    ID000002- - - - - - - 2010/03/15
    ID000003- - - - - - - 2010/08/11

  7. #7
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Alors, sauf erreur, les réponses données sont correctes !!!!! (OVER PARTITION)

  8. #8
    Membre averti
    Homme Profil pro
    Consultant
    Inscrit en
    Mars 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 22
    Par défaut
    Pardon. Je me suis mal exprimé.

    Les données à retourner sont uniquement les ID mais pas les stamps.

    Merci pour votre aide.

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

Discussions similaires

  1. Probleme formulaire sans doublon...
    Par sentenza dans le forum IHM
    Réponses: 6
    Dernier message: 09/02/2006, 12h29
  2. Requête de soustraction sans doublons
    Par waloon dans le forum Requêtes
    Réponses: 3
    Dernier message: 24/01/2006, 23h22
  3. remplir un tableau sans doublons ...
    Par ryo-san dans le forum C
    Réponses: 22
    Dernier message: 10/11/2005, 12h43
  4. [Postgresql] insertion sans doublon
    Par Pwill dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 08/06/2005, 11h37
  5. Comment mettre à jour une ligne sans doublon via déclencheur
    Par fuelcontact dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/08/2004, 15h56

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