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 :

Optimisation de requete - sélection enreg le plus récent


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 83
    Par défaut Optimisation de requete - sélection enreg le plus récent
    Bonjour,

    j'ai actuellement 2 requêtes SQL qui me permettent de créer 2 tables puis je regroupe ces 2 tables en utilisant une étape data dans SAS. Afin de diminuer les temps de traitement, l'objectif est de faire tout cela via 1 unique requete SQL optimisée.
    Un peu plus de détails:
    La 1ère requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    create table persdetinta  as
    	select person_id, gender as sex, nationality,
    	case nationality when 'CH ' then 0 when '   ' then 0 else 1 end as non_native length 3, language,
    	marital_state as marital_status, party_inf_chplus as chplus, party_inf_adb as adb, block_for_advertis
     
    	from p_person(dbkey= party_id,) a, 
                        sampleh b
    	where a.party_id eq b.person_id
    			and &now_date between valid_from and valid_to;
    La 2ème requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create table agefix as
    	select person_id, valid_from, date_of_birth	
    	from p_person(dbkey party_id) a,	
                        sampleh b
    	where a.party_id eq b.person_id
    			and date_of_birth ne .;
    Avec cette 2eme requete, j'obtiens tous les enreg du person_id. Je ne souhaite en fait prendre en compte que le dernier enregistrement ie celui avec la data valid_from la plus récente (normalement je fais cela ds une procédure SAS).
    Après avoir fait cette sélection je souhaite regrouper les 2 tables obtenues en une seule en prenant comme base la table persdetinta et en mergeant sur person_id.
    Remarque : les 2 requêtes utilisent les mêmes tables sources mais les conditions (where) ne sont pas les mêmes...

    Qqn a-t-il une idée?merci

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Pour quelle SGBD ?

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 83
    Par défaut
    désolé..j'ai oublié : Oracle 10

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 83
    Par défaut
    personne n'a d'idées ...au moins pour la 2éme requete: comment ne sélectionner que le dernier enregistrement ie celui avec la data valid_from la plus récente?

  5. #5
    Membre éprouvé
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Par défaut
    Je ne sais pas si c'est ce dont tu as besoin, mais cette requete récupère uniquement la ligne la plus récente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT person_id, valid_from, date_of_birth	
    	FROM p_person(dbkey party_id) a,	
                        sampleh b
    	WHERE a.party_id eq b.person_id
    	   AND valid_from = (SELECT Max(valid_form) MaxValidForm
                                          FROM p_person(dbkey party_id) aa
                                        WHERE aa.person_id = a.person_id);

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 83
    Par défaut
    J'ai essayé ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    create table agefixmodif as
    SELECT person_id, valid_from, date_of_birth	
    	FROM p_person(dbkey=party_id) a,	
                        sampleh b
    	WHERE a.party_id eq b.person_id
    		and date_of_birth ne .
    	   AND valid_from = (SELECT Max(valid_from) as MaxValidForm
                                          FROM p_person(dbkey=party_id) aa
                                        WHERE aa.party_id = a.party_id);
    et ca tourne depuis 3 heures...pas moyen d'optimiser cette requête?

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Par défaut Performance
    C'est quoi le plan d'exécution de cette requête ?

    A première vue, j'essaierai d'abord un index sur p_person (si c'est bien une table et pas une vue) défini comme ça :

    person_id
    valid_from

    Ce qui devrait sérieusement accélérer la sous-requête qui cherche le max().

Discussions similaires

  1. recherche de la date la plus récente dans une requete
    Par isabelle b dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 17/05/2008, 17h30
  2. sélection de la date la plus récente
    Par karinal dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 24/08/2007, 14h28
  3. requete : selectioner les dates les plus récentes
    Par aujero dans le forum Access
    Réponses: 6
    Dernier message: 01/03/2006, 10h40
  4. Sélection de l'enreg le plus récent
    Par JeAn-PhI dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/01/2006, 10h48
  5. Sélection du plus récent avec jointure
    Par nicovmd dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/10/2005, 10h26

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