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 :

Selection des lignes MAXDATES par Types de situations


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 23
    Points : 18
    Points
    18
    Par défaut Selection des lignes MAXDATES par Types de situations
    Bonjour,

    je souhaiterais depuis une même table ressortir les lignes avec le MAXDATE d'un champs en pour chaque type de situation par agent.

    Exemple:

    Matricule TypeSituation Date
    1 P 01/01/2010
    1 P 01/01/2012
    1 S 01/01/2008
    3 P 01/03/2011


    Mon select devra ressortir:
    1 P 01/01/2012
    1 S 01/01/2008
    3 P 01/03/2011

    Comment faire?

    Merci.

  2. #2
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Bonjour,

    Vous devez utiliser la fonction d'aggrégation MAX et une clause GROUP BY.

    Cordialement,

    Arkhena

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Merci, néanmoins dans le cas de la création de ma vue cela ne marche pas et dans certains cas ca me remonte que la ligne S (qui est la MAXDATE) au lieu de me remonter la ligne S et la ligne P!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE VIEW Vue_TEST
    AS SELECT TABLE.*
    FROM TABLE
    WHERE TABLE.DTEEFF = (SELECT Max(P2.DTEEFF)  
                                      FROM TABLE P2
                                      WHERE TABLE.Matricule = P2.Matricule 
                                      AND TABLE.TYPSITUATION = P2.TYPSITUATION 
    				  GROUP BY (TABLE.TYPSITUATION )
    									   );

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Je ne sais pas ce qu'est censée faire cette requête mais ça m'étonnerait qu'elle fonctionne !
    Vous voyez que "TABLE" est coloré en bleu ; c'est un mot clé du langage SQL à ne pas utiliser pour nommer une table, en plus de ne rien vouloir dire, sauf éventuellement si cette table SQL contient des données sur des tables à 4 pieds (ou plus).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE ENTSITPAIE.Matricule
    Où est déclarée la table "ENTSITPAIE" ?
    Serait-ce une tentative incomplète de masquer le nom de cette table en l'ayant renommée bêtement "TABLE" ?
    Inutile de vouloir masquer le nom de la table, c'est une information de toute façon bien insuffisante pour aller espionner vos données dont nous n'avons rien à faire !

    Conformément aux règles de ce forum, donnez la structure de vos tables nécessaires à la satisfaction du besoin et précisez plus clairement ce que vous attendez comme résultat.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Je vais reprendre clairement puisque apparemment ça dérange:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE VIEW Vue_TEST
    AS SELECT SITUATION.*
    FROM SITUATION
    WHERE SITUATION.DTEEFF = (SELECT Max(P2.DTEEFF)  
                                      FROM SITUATION P2
                                      WHERE SITUATION.Matricule = P2.Matricule 
                                      AND SITUATION.TYPSITUATION = P2.TYPSITUATION 
    				  GROUP BY (SITUATION.TYPSITUATION )
    									   );

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 849
    Points : 52 978
    Points
    52 978
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    WITH T AS ( 
    SELECT *, RANK() OVER(PARTITION BY Matricule, TYPSITUATION ORDER BY DTEEFF DESC) AS N 
    FROM   SITUATION)
    SELECT *
    FROM   T
    WHERE  N = 1;
    À me lire : http://sqlpro.developpez.com/article...clause-window/

    A +

Discussions similaires

  1. [PDO] comptage des lignes retournées par une requête SELECT un peu complexe
    Par laurentSc dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/02/2015, 21h37
  2. Réponses: 5
    Dernier message: 30/06/2011, 21h15
  3. Réponses: 3
    Dernier message: 25/05/2007, 10h10
  4. recuperation des lignes commencant par -
    Par vince2005 dans le forum Langage
    Réponses: 1
    Dernier message: 24/04/2007, 14h55
  5. Réponses: 2
    Dernier message: 01/06/2004, 15h08

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