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 :

Formulation de la requête liée à la date


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2004
    Messages : 282
    Points : 103
    Points
    103
    Par défaut Formulation de la requête liée à la date
    Bonjour,

    J'ai 3 tables :

    T_athlete(id_athlete,nom,prenom,...)
    T_epreuve(id_epreuve,designation,...)
    T_record(id,id_athlete,id_epreuve,performance,dat_record)

    ce ke j'arrive faire pour une année X d'afficher les derniers records réaliser.

    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
    SELECT 
    T_athlete.id_athlete, athlete.nom, T_athlete.prenom
     
    T_epreuve.id_epreuve, T_preuve.designation, 
     
    T_record.id, T_record.id_athlete, T_record.id_epreuve, T_record.performance, T_record.dat_record
     
    FROM T_athlete, T_record, T_epreuves
     
    WHERE T_athlete.id_athlete = T_record.id_athlete 
     
    AND T_record.id_epreuve = T_epreuve.id_epreuve 
    AND EXTRACT( YEAR FROM T_record.dat_record ) <= '2000' 
    ORDER BY T_epreuve.id_epreuve ASC  
     
    (Faut respecter l'affichage de resultat par ordre des epreuves )
    Jusque là, ma requete est bonne, mais le problème est le suivant :

    Pour un athlete X qui a réalisé à 200m un record à la date suivante 12-03-1998, cet athlete a battu un autre record à l'année 2002 donc si je demande à ma requete qu'il affiche les records jusque l'année 2000 il me sort celui ki est réalisé en 1998 mais cette fois ci si je demande à mon systeme les records réaliser jusqu'à l'année 2004, normalement il me sort les 2 records pour un seul epreuve (200m) celui de 1998 et de 2002 OR il faut k'il me sort uniquement le dernier record réalisé pour un epreuve cad celui de 2002 pour le 200m.


    Merci de me débloquer.

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut Re: Formulation de la requête liée à la date
    Citation Envoyé par wperle
    Merci de me débloquer.
    Est-ce que tu pourrais commencer par :
    1) débloquer la touche q de ton clavier (langage SMS interdit sur ce forum)
    2) débloquer la fonction recherche, ce point ayant été traité des dizaines de fois (au moins).

    Pour te débloquer : le principe est de rajouter à ta requête, une condition du genre :

    dat_record = (SELECT MAX(dat_record) FROM ... WHERE même épreuve et même athlète que dans la requête principale)

  3. #3
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2004
    Messages : 282
    Points : 103
    Points
    103
    Par défaut
    Merci pour ta rapidité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1) débloquer la touche q de ton clavier (langage SMS interdit sur ce forum)
    - J'ai pas compris ce que tu veux dire.

    Pour concrétiser mon probleme je te donne un exemple, pour te dire que j'ai bel et bien ajouter dans ma requete MAX(dat_record).... GROUP BY

    Pour bien voir les choses merci de voir ce résultat :

    designation-----nom---prenom---performance----dd
    100m----------Athlete A---A---------11.55---------1989-07-14
    200m----------Athlete B---B---------23.29---------1998-08-30
    200m----------Athlete B---B---------23.00---------2000-08-06
    400m----------Athlete B---B---------51.67---------1998-09-01
    800m----------Athlete C---C---------1:56.43-------2004-10-23
    800m----------Athlete C---C---------1:57.45-------1999-07-02
    1000m--------Athlete C---C---------2:33.15--------1999-07-17
    1500m--------Athlete D---D---------4:00.60--------1998-07-10
    Mile-----------Athlete E---E---------4:30.69---------1986-08-05
    3000m-------Athlete D---D---------8:26.48---------1999-08-11
    2 Miles-------Athlete E---E---------9:38.44----------1987-09-13
    5000m-------Athlete D ---D--------14:32.08---------1998-09-01
    10 000m-----Athlete F---F---------31:16.94---------2001-09-12
    100m Haies--Athlete B---B---------13.55-----------1990-08-12
    400m Haies--Athlete B---B---------52.90-----------1999-09-11
    3000m steeples----Athlete I---I----9:30.35--------2004-07-04
    4 x 100m----Athlete H---H----------46.05----------1991-07-11
    4 x 100m----Athlete K---K---------46.05-----------1991-06-11
    4 x 100m----Athlete B---B---------46.05-----------1991-07-11
    4 x 100m----Athlete Q---Q---------46.05-----------1991-07-11
    4 x 400m----Athlete w---w---------3:39.46---------1991-07-11
    4 x 400m----Athlete AA---AA-------3:39.46---------1991-07-11
    4 x 400m----Athlete B---B----------3:39.46---------1991-07-11
    4 x 400m----Athlete BB---BB-------3:39.46---------1991-07-11
    3km----------Athlete X ---X---------14:47.5---------1993-04-14
    5km----------Athlete X ---X---------25:12.3---------1990-07-01
    10km--------Athlete X ---X---------54:08.54---------1992-05-14
    Semi Marathon-----Athlete F---F----1h08:34---------1999-01-31
    Marathon------------Athlete P---P---2h28:17---------1995-09-24
    Marathon------------Athlete Y---Y---2h26:10---------2004-04-04


    Je voudrais restituer les records réaliser jusqu'au 2004.

    Primo :
    Pour 200m ce qui doit sortir :
    200m----------Athlete B---B---------23.00---------2000-08-06
    et non pas ça
    200m----------Athlete B---B---------23.29---------1998-08-30

    Secundo :
    Pour 4 x 100m
    4 x 100m----Athlete H---H----------46.05----------1991-07-11
    4 x 100m----Athlete K---K---------46.05-----------1991-06-11
    4 x 100m----Athlete B---B---------46.05-----------1991-07-11
    4 x 100m----Athlete Q---Q---------46.05-----------1991-07-11

    Je voudrais les 4, car c'est un epreuve combiné et grace à ses 4 athletes qu'il y a un record (Idem pour 4 X 400m)

    Si je fais le GROUP BY sur le nom de l'athlete, et ça dois pas se faire car un athlete pourras participer dans n epreuves et pourras faire des records dans ses epreuves.

    Vraiment suis perdu.

  4. #4
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut Re: Formulation de la requête liée à la date
    Citation Envoyé par wperle
    ce ke j'arrive ...
    Simplement d'utiliser un bon language!
    C'est plus plaisant à lire

  5. #5
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT a.id_athlete, a.Nom, a.Prenom,
           e.Id_epreuve, e.designation
           r.Id, r.performance, r.dat_record
    FROM T_record r INNER JOIN T_athlete  a ON a.id_athlete = r.id_athlete 
                    INNER JOIN T_epreuves e ON e.id_epreuve = r.id_epreuve
    WHERE dat_record = (SELECT MAX(dat_record)
                        FROM T_record t
                        WHERE t.id_athlete = r.id_athlete 
                          AND t.id_epreuve = r.id_epreuve)
    ORDER BY r.id_epreuve

  6. #6
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2004
    Messages : 282
    Points : 103
    Points
    103
    Par défaut
    Bonjour,
    .......
    FROM T_record r
    WHERE dat_record = (SELECT MAX(dat_record)
    FROM T_record t
    .....)
    ......
    J'ai une confusion de comprendre dat_record c'est du table r ou t

    on faite je travaille sous MySQL et

    c'est l'erreur suivant qui me sort :

    MySQL a répondu:


    #1064 - You have an error in your SQL syntax near 'SELECT MAX( dat_record )
    FROM T_record t
    WHERE t.id_athlete = r.id_athlete AND' at line 6
    Merci d'avance

  7. #7
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    r et t sont des alias.

    mySQL ne supporte les requêtes imbriquées qu'à partir de la 4.1

    Rappel : règle du forum, il faut indiquer le moteur de SGBDR et la version...

  8. #8
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2004
    Messages : 282
    Points : 103
    Points
    103
    Par défaut
    Le SGBDR j'ai est le suivant (de l'hebergeur) : phpMyAdmin 2.5.3
    Est ça doit marcher les requete imbriquer dans cette version

  9. #9
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    C'est la version de mySQL qui compte, pas celle de phpmyadmin

Discussions similaires

  1. [requête] comparaison de date
    Par Fabouney dans le forum DB2
    Réponses: 4
    Dernier message: 31/01/2006, 21h24
  2. Requête sur champ DATE
    Par bud_gw dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/12/2005, 13h18
  3. Debutant - Requête Grouper par Date
    Par ghan77 dans le forum Bases de données
    Réponses: 3
    Dernier message: 06/12/2005, 17h07
  4. [JDBC] Requête avec une date sous la forme dd/MM/yyyy
    Par sylviefrfr dans le forum JDBC
    Réponses: 6
    Dernier message: 12/11/2005, 09h35
  5. problème de formulation d'une requête
    Par seiryujay dans le forum Langage SQL
    Réponses: 4
    Dernier message: 20/08/2004, 17h13

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