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

Langage SQL Discussion :

SELECT DISTINCT + ORDER BY


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2017
    Messages : 6
    Points : 6
    Points
    6
    Par défaut SELECT DISTINCT + ORDER BY
    Bonjour, j'ai un problème avec une requète SQL (ADODb sur base Oracle) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT matricule, nom, prenom, metier_nom, service_nom, affectation_date_debut, affectation_date_fin 
    FROM agents, metiers, services, affectations
    WHERE services.id = agents.service_id AND metiers.id = agents.metier_id AND affectations.agent_matricule = agents.matricule
    ORDER BY matricule ASC, affectation_date DESC
    Les agents peuvent avoir plusieurs affectations, l'affectation en cours n'a pas de date de fin de spécifiée. Mon but est d'avoir la dernière affectation ou l'affectation en cours d'un agent.

    La requête fonctionne correctement sauf pour le DISTINCT...

    Avez vous une idée de ce qui cloche ?

    Merci, d'avance.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 378
    Points : 39 860
    Points
    39 860
    Billets dans le blog
    9
    Par défaut
    Bonsoir,

    "La requête fonctionne correctement sauf pour le DISTINCT..." mais encore ?
    Le plus parlant eût été de communiquer le résultat obtenu et le résultat attendu

    Quand vous dites "Mon but est d'avoir la dernière affectation ou l'affectation en cours d'un agent.", si on peut traduire cette règle par : "il n'existe pas d''affectation dont la date de validité est supérieure pour l'agent" alors vous pouvez utiliser max() ou bien exists

    De plus, celà doit faire 25 ans que les jointures s'écrivent avec l'opérateur JOIN, vous gagnerez en clarté à séparer les critères de filtrage (WHERE) de ceux de jointure (JOIN)

    Voici un exemple de requête pour rechercher la dernière date d'affectation pour un agent, si la règle est bien celle supposée ci-dessus, et qui utilise des jointures normalisées :

    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
    SELECT AG.matricule
         , AG.nom
         , AG.prenom
         , MA.metier_nom
         , AF.service_nom
         , AF.affectation_date_debut
         , AF.affectation_date_fin 
    FROM agents         AG
    inner join metiers  ME
       on ME.id = AG.metier_id
    inner join services SV
       on SV.id = AG.service_id
    inner join affectations AF
       on AF.agent_matricule = AG.matricule 
    WHERE not exists
         (select 1
          from agents S1
          inner join affectation S2
             on  S2.agent_matricule = S1.matricule 
          where S1.id = AG.id
            and S2.affectation_date_debut > AF.affectation_date_debut)
    ORDER BY AG.matricule     ASC
           , AF.affectation_date DESC

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2017
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Merci pour la réponse. En effet, avec les JOINTURES c'est mieux... La requête que tu fonctionne bien. Mon problème est que je travaillais plutôt sur la date de fin d'affectation plutôt que celle du début.

    Merci problème résolu

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

Discussions similaires

  1. [AC-2003] Select Distinct et Order by : possible ?
    Par Monkey_D.Luffy dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 27/07/2010, 19h44
  2. select Distinct champ, order by timestamp
    Par DonkeyMaster dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 28/01/2008, 19h45
  3. SELECT DISTINCT ... ORDER BY
    Par amenis dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 29/07/2005, 11h23
  4. Select distinct et order by
    Par arsgunner dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/06/2004, 12h17
  5. equivalent SELECT DISTINCT pour MyBase?
    Par chrisou31 dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/03/2004, 20h33

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