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 par la plus grande date d'une année


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 46
    Points : 21
    Points
    21
    Par défaut selection par la plus grande date d'une année
    Yo !

    J'ai une table SITUATION avec :
    num_eleve (id) int
    date_debut date
    num_et varchar
    code_classe varchar

    elle sert a renseigner l'utilisateur sur la situation scolaire d'un eleve

    J'ai du faire un état, qui selectionne les dernieres situations des eleves a une année donnée et par numero d'etablissement. J'ai donc fait cette requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT num_eleve, date_debut, num_et, code_classe
    FROM SITUATION 
    WHERE num_et = '0420044V ' 
    AND YEAR(date_debut) = '2007'
    Ce qui me donne ce résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    5  	2007-02-19  	0420044V  	BTS IG
    5 	2007-02-20 	0420044V 	master info
    5 	2007-02-23 	0420044V 	T STG
    5 	2007-04-30 	0420044V 	2nd ISI
    7 	2007-02-20 	0420044V 	L3 miage
    8 	2007-02-20 	0420044V 	CE1
    Petit problème : comme vous le voyez, on peut visualiser plusieurs eleves si on a enregistré plusieurs situations dans une meme année, et il ne faut qu'une seulle ligne par élève qui retrace sa derniere situation. J'ai essayé plusieurs methodes comme celle ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT num_eleve, max(date_debut), num_et, code_classe
    FROM SITUATION 
    WHERE num_et = '0420044V ' 
    AND YEAR(date_debut) = '2007' 
    group by num_eleve
    Mais sa melange tout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    5       2007-04-30  	0420044V  	BTS IG
    7 	2007-02-20 	0420044V 	L3 miage
    8 	2007-02-20 	0420044V 	CE1
    Si vous avez une solution, ça m'aiderait bien ^^

    merci d'avance

  2. #2
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 107
    Points : 126
    Points
    126
    Par défaut
    Essayer d'adapter cette requete à ta base( j'ai utilisé Oracle 9i)

    SELECT a.num_eleve, a.date_debut,a.num_et, a.code_classe
    FROM SITUATION a
    WHERE a.num_et = '0420044V '
    AND to_char(a.date_debut, 'YYYY') = '2007'
    AND a.date_debut = (select max(b.date_debut) from SITUATION b where a.num_eleve = b.num_eleve group by a.num_eleve)

    Ca donne les resultats demandés :

    5 30/04/2007 0420044V 2nd ISI
    7 20/02/2007 0420044V L3 miage
    8 20/02/2007 0420044V CE1

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 46
    Points : 21
    Points
    21
    Par défaut
    Voila le code adapté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT num_eleve, date_debut, num_et, code_classe 
    FROM SITUATION A 
    WHERE num_et = '0420044V' 
    AND YEAR(date_debut) = '2007' 
    AND date_debut = (
    select max(date_debut) 
    from SITUATION B 
    where A.num_eleve = B.num_eleve 
    group by A.num_eleve
    )
    Ca ne donne aucune erreur, mais ça n'affiche rien (j'utilise mysql avec phpmyadmin)

    j'aurais peut etre du indiquer que la clé primaire est (num_eleve, date_debut) dsl

  4. #4
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 107
    Points : 126
    Points
    126
    Par défaut
    oups desolé faire
    GROUP BY B.num_eleve

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 46
    Points : 21
    Points
    21
    Par défaut
    ça ne fonctionne pas non plus

  6. #6
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 107
    Points : 126
    Points
    126
    Par défaut
    J'ai crée la table
    create table SITUATION
    (num_eleve number(2),
    date_debut date,
    num_et varchar2(10),
    code_classe varchar2(20));

    J ai ajouté les donnéés à la table SITUATION en utilisant sql loader
    5 2007-02-19 0420044V BTS IG
    5 2007-02-20 0420044V master info
    5 2007-02-23 0420044V T STG
    5 2007-04-30 0420044V 2nd ISI
    7 2007-02-20 0420044V L3 miage
    8 2007-02-20 0420044V CE1

    l'execution de la réquete suivante :

    SELECT A.num_eleve, A.date_debut, A.num_et, A.code_classe
    FROM SITUATION A
    WHERE A.num_et like '%0420044V%'
    AND A.date_debut = (
    SELECT max(B.date_debut)
    FROM SITUATION B
    WHERE B.num_eleve = A.num_eleve
    )

    donne :

    NUM_ELEVE DATE_DEBUT NUM_ET CODE_CLASSE
    5 30/04/2007 0420044V 2nd ISI
    7 20/02/2007 0420044V L3 miage
    8 20/02/2007 0420044V CE1


    C’est testé sur Oracle, il reste à l’adapter pour MySql.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 46
    Points : 21
    Points
    21
    Par défaut
    bon faut que je rentre chez moi, j'ais finit ma journée. Mais d'apres toutes les tentatives que j'ais faites, ça n'a rien donné. Je verrais ça ce soir, mais je m'attend pas a ce que ça marche.

  8. #8
    Membre habitué
    Inscrit en
    Juin 2003
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 107
    Points : 126
    Points
    126
    Par défaut
    Bon courage et Bonne chance.

    Ca marché sur Oracle donc ça devra marche avec MySql.

    Enjoy.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 46
    Points : 21
    Points
    21
    Par défaut
    Ca a finalement marché avec cette requete. Mais quand j'ai rajouté des situations d'une autres années, ça n'a plus marché qu'avec l'année 2007.

    J'ai donc essayé plusieurs solutions alternatives, et celles qui a l'air d'etre correcte est celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT A.num_eleve, A.date_debut, A.num_et, A.code_classe 
    FROM SITUATION A 
    WHERE A.num_et = '$num_et ' 
    AND YEAR(A.date_debut) = '$année' 
    AND A.date_debut = (
    SELECT MAX(B.date_debut) 
    FROM SITUATION B 
    WHERE A.num_eleve = B.num_eleve 
    AND A.num_et = B.num_et 
    GROUP BY B.num_eleve
    )
    Cependant, je crois qu'il faudrait inserer plusieurs champs suplémentaires, pour realiser d'autres tests : si sa se trouve, c'est pas completement juste.

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

Discussions similaires

  1. Plus grande date par contexte
    Par PAYASS59 dans le forum Webi
    Réponses: 4
    Dernier message: 02/11/2011, 19h19
  2. [XL-2007] Remplir un textbox par le plus grand nombre d'une colonne
    Par dodo28 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/11/2009, 16h42
  3. Sélectionner une ligne par un ID avec la plus grande date
    Par lhonolulu dans le forum SAS Base
    Réponses: 5
    Dernier message: 03/06/2009, 17h47
  4. Réponses: 2
    Dernier message: 20/02/2007, 10h29
  5. VBA_E : Selection des 5 plus grandes valeurs d'une colonne..
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/09/2006, 17h39

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