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 :

Requête SQL Group by


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de Razorflak
    Homme Profil pro
    Développeur Flex/AS3
    Inscrit en
    Juin 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Flex/AS3
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 97
    Points : 192
    Points
    192
    Par défaut Requête SQL Group by
    Bonjour,
    j'aurais besoin de votre aide pour la création d'une vue.

    Pour vous expliquer mon cas , j'ai une table contenant des ID_DOSSIER (non unique), une date de rédaction (REDACTIONDATE) par ligne et d'autre informations.
    Se que je souhaiterais, c'est de ramené dans ma vue une ligne par ID_DOSSIER avec les information qui sont sur la ligne avec la REDACTIONDATE la plus récente.
    J'ai tenté de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE OR REPLACE VIEW VL_SELECTDECISIONCOURRANTEDOS ( ID_DOSSIER, 
    ID_ARRNUMLST, DECISLSTTYPE, DECISLSTREDACTIONNATURE, DECISLSTSIGNATUREDATE, 
    DECISLSTREDACTIONDATE ) AS Select DISTinct ID_DOSSIER,ID_ARRNUMLST,DECISLSTTYPE,DECISLSTREDACTIONNATURE, DECISLSTSIGNATUREDATE,
    max(DECISLSTREDACTIONDATE) as DECISLSTREDACTIONDATE
    from DOSDECISLST  group by
    ID_DOSSIER,ID_ARRNUMLST,DECISLSTTYPE,DECISLSTREDACTIONNATURE,DECISLSTSIGNATUREDATE
    Having max(DECISLSTREDACTIONDATE) IS NOT NULL and
    DECISLSTREDACTIONNATURE IS NOT NULL
    mais bien sur, sa me ramène plusieurs lignes par ID_DOSSIER lorsque par exemple il y a plusieurs DECISLSTREDACTIONNATURE différent.

    561041 236101 DECISION INITIALE Favorable 15/11/2011
    561041 236121 PROROGATION Favorable 21/10/2011


    Merci d'avance de votre aide.
    Cordialement.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 103
    Points : 28 400
    Points
    28 400
    Par défaut
    Le principe est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT  tbl.*   --  Les colonnes que tu veux afficher
    FROM    matable tbl
    WHERE   EXISTS
            (   SELECT  NULL
                FROM    matable sel
                WHERE   tbl.id      = sel.id        --  La condition de regroupement
                HAVING  tbl.date    = MAX(sel.date) --  La colonne sur laquelle s'effectue la sélection               
            )
    ;
    Ne te reste plus qu'à le mettre en oeuvre avec ta table

    PS : L'un des avantages du langage SQL, c'est qu'on peut placer des sauts de ligne et des indentations où on veut, pour rendre les requêtes lisibles!

  3. #3
    Membre habitué Avatar de Razorflak
    Homme Profil pro
    Développeur Flex/AS3
    Inscrit en
    Juin 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Flex/AS3
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 97
    Points : 192
    Points
    192
    Par défaut
    Après une demi heure de test et manipulation j'arrive toujours au même résultat:

    ID_DOSSIER DECISLSTREDACTIONDATE

    561203 05/12/2012
    561203 18/12/2012
    561203 19/12/2012

    en faisant de cette manière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    select ID_DOSSIER,DECISLSTREDACTIONDATE
    from DOSDECISLST a
    WHERE EXISTS(
    	  		 	Select null
    				from DOSDECISLST b
    				where a.ID_DOSSIER = b.ID_DOSSIER
    				and a.DECISLSTREDACTIONDATE = b.DECISLSTREDACTIONDATE
    				having(a.DECISLSTREDACTIONDATE = max(b.DECISLSTREDACTIONDATE))
    			)
    ;
    ya quelque chose que j'ai pas du comprendre, j'ai cherché sur google pour avoir quelques exemple de l'utilisation du EXISTS mais rien de concluant. Si tu vois où je me suis trompé.

    PS: Désolé pour l'indentation du premier post, j'ai fait un copier collé du code source de TOAD

  4. #4
    Membre habitué Avatar de Razorflak
    Homme Profil pro
    Développeur Flex/AS3
    Inscrit en
    Juin 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Flex/AS3
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 97
    Points : 192
    Points
    192
    Par défaut
    C'est bon j'ai rien dis, sa marche parfaitement. Un grand MERCI

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    select distinct ID_DOSSIER,DECISLSTREDACTIONDATE
    from DOSDECISLST a
    WHERE EXISTS(
    	  		 	Select 1
    				from DOSDECISLST b
    				where a.ID_DOSSIER = b.ID_DOSSIER
    				having(max(b.DECISLSTREDACTIONDATE) = a.DECISLSTREDACTIONDATE)
    			)
    ;

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 244
    Points : 12 878
    Points
    12 878
    Par défaut
    Bonjour,
    Je partirai plutôt du côté de not exists: la date la plus récente est celle pour laquelle il n'y en a pas de plus récente.
    Ca a l'air tout con de le formuler ainsi, mais c'est ce qui se rapproche le plus de la façon de faire en SQL.

    Tatayo.

    P.S. Not Exist est une solution parmi plusieurs autres: jointure externe, utilisation de MAX et d'une sous-requête...

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 103
    Points : 28 400
    Points
    28 400
    Par défaut
    Ne penses-tu pas qu'une de ces conditions est de trop ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    where a.DECISLSTREDACTIONDATE = b.DECISLSTREDACTIONDATE
    having a.DECISLSTREDACTIONDATE = max(b.DECISLSTREDACTIONDATE)
    Edit : Tu as trouvé entre temps !

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

Discussions similaires

  1. [AC-2010] VBA, Requête SQL, Group By
    Par MitchP dans le forum Access
    Réponses: 2
    Dernier message: 18/11/2014, 09h51
  2. [SQL] group by et order by dans la même requête ?
    Par thomfort dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/08/2007, 22h31
  3. Requête SQL avec UNION, sum et GROUP BY
    Par Guitariff dans le forum Langage SQL
    Réponses: 6
    Dernier message: 03/12/2006, 13h48
  4. Requête SQL - Pb avec la clause GROUP BY
    Par jeromesco dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/07/2006, 09h04
  5. [Access] Requète SQL Group By, Order By and Co
    Par zoidy dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/06/2006, 14h37

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