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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 52
    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 : 52
    Localisation : France

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

    ---
    Farid

+ 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