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 :

[Oracle] Condition dans un select


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loir et Cher (Centre)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 36
    Par défaut [Oracle] Condition dans un select
    Bonjour a tous.

    Voilà, j'ai une petite difficulté.

    J'ai une requete (pour un curseur) qui doit retourner l'element dont la date_debut_contrat est le max des dates_debut_contrat et si celle ci est nulle, qui retourne le max de la date_fin_contrat.

    Voici le code, ca sera plus explicite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select agt.nom, agt.prenom
    from agents_contrats agt
    where 
    agt.date_debut_contrat = (
        select max(agt2.date_debut_contrat)
        from agents_contrats agt2
        where agt2.nom = agt.nom and agt2.prenom = agt.prenom
    )
    Mais là, si le select max retourne null, il faut que je teste ce truc là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    agt.date_fin_contrat = (
        select max(agt2.date_fin_contrat)
        from agents_contrats agt2
        where agt2.nom = agt.nom and agt2.prenom = agt.prenom
    )
    Et là, je vois pas comment faire pour imbriquer ces deux tests...

    Merci de m'eclairer de vos lumieres si vous avez une idée!

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    Bonjour.

    TU peux essayer quelque chose comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT agt.nom, agt.prenom
      FROM agents_contrats agt
     WHERE agt.date_debut_contrat IS NOT NULL
       AND agt.date_debut_contrat = (SELECT MAX (agt2.date_debut_contrat)
                                       FROM agents_contrats agt2
                                      WHERE agt2.nom = agt.nom AND agt2.prenom = agt.prenom)
    UNION
    SELECT agt.nom, agt.prenom
      FROM agents_contrats agt
     WHERE agt.date_debut_contrat IS NULL
       AND agt.date_fin_contrat = (SELECT MAX (agt2.date_fin_contrat)
                                     FROM agents_contrats agt2
                                    WHERE agt2.nom = agt.nom AND agt2.prenom = agt.prenom)

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 280
    Par défaut
    Salut,

    A verifier si celle ci n'est pas plus rapide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT agt.nom, agt.prenom, max(date_debut_contrat) as DT_RESULT FROM agents_contrats WHERE date_debut_contrat IS NOT NULL GROUP BY agt.nom, agt.prenom
    UNION ALL 
    SELECT agt.nom, agt.prenom, max(date_fin_contrat) as DT_RESULT FROM agents_contrats WHERE date_debut_contrat IS NULL GROUP BY agt.nom, agt.prenom
    ---
    Farid

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    Assurément, elle l'est.

  5. #5
    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
    Et toujours sans le union :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT agt.nom, agt.prenom,
        nvl(max(date_debut_contrat), max(date_fin_contrat)) AS DT_RESULT
    FROM agents_contrats
    GROUP BY agt.nom, agt.prenom

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 280
    Par défaut
    ah belle optimisation avec le nvl !

    ---
    Farid

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loir et Cher (Centre)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 36
    Par défaut
    Bon, merci beaucoup, vous etes trop forts!
    Mais bon, mon chef est passé par la et m'a changé completement mon algorithme.
    Donc là, ca marche mais il me retourne 150 lignes de plus que prévu... Et je comprend pas du tout pourquoi... Et c'est pour ce soir....

  8. #8
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Par défaut
    Citation Envoyé par darkangel23fr Voir le message
    Bon, merci beaucoup, vous etes trop forts!
    Mais bon, mon chef est passé par la et m'a changé completement mon algorithme.
    Donc là, ca marche mais il me retourne 150 lignes de plus que prévu... Et je comprend pas du tout pourquoi... Et c'est pour ce soir....

    T'en en train de dire , que le chef a toujours raison, mais la il a tord ?

    il faut lui montrer le resultat des requetes attendues et le resultat obtenu par sa requete...

    en plus des perfs

    A moins que les predicats du chefs sont completement differents de ce que tu as enoncé tout au debut ....

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

Discussions similaires

  1. [BI4] Faire une condition dans le select d'un objet
    Par olivier45fr dans le forum Designer
    Réponses: 2
    Dernier message: 09/04/2015, 09h51
  2. condition dans requête select
    Par lionel256 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/05/2008, 10h23
  3. [MySQL] Problème de condition dans le SELECT
    Par nicocaine dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 15/06/2007, 08h20
  4. [Oracle] Dayname dans select
    Par Cupidon dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/05/2006, 14h03
  5. 3 conditions dans une clause SELECT
    Par Aurèl90 dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 03/11/2005, 16h05

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