Partage
  • Partager sur Facebook
  • Partager sur Twitter

Records Sportif

Sujet résolu
    19 octobre 2018 à 11:12:32

    Bonjour à tous

    J'ai une table de record "sportif" avec une construction ainsi

    Id_athlete

    id_epreuve

    date_performance

    lieu

    performance_numerique

    la clé primaire étant combiné entre tous ces champ (il y en a d'autre)

    J'ai par exemple

    les données suivantes

    (id_athlete,id_epreuve,date,lieu,performance)

    (1,261,2018,toto,3410)

    (2,261,2018,paris,3310)

    (1,250,2018,Marseille,158)

    Je cherche à faire une requete qui me sortirai

    Epreuve,performance minimum,id_athlte associé,lieu,date)

    Pas de problème pour sortir

    Epreuve + Performance minimum

    Je fais un select id_epreuve,min(performance) from performance group by id_epreuve

    là où je ne trouve pas ma solution c'est pour afficher pour chaque épreuve, la performance minimale et l'id athlète concerné

    J'ai essayé en mettant 2 groupe by (id_epreuve puis id_athlete) mais cela donne le record de chacun des id_athlete là où je ne veux que le plus "bas" id athlète par id_epreuve

    De même en mettant limit (1) je n'ai qu'un record

    Quelqu'un a-t-il une idée ?

    Merci d'avance :)

    Maurin

    edit 11h48 :

    Re bonjour à tous

    J'ai trouvé une solution mais elle n'est pas "génial"

    1) requete pour sortir les records par epreuve

    select id_epreuve,min(performance) from performance group by id_epreuve

    2) Requete pour sortir les athlètes avec un inner join

    Select * from performance

    inner join (requete 1) tablerecord on tablerecord.id_epreuve=performance.id_epreuve and tablerecord.min(performance)=performance.performance

    C'est fonctionnel, mais j'ai un peu peur de la performance

    Quelqu'un a une idée si c'est viable sur une table à maximum 20 000 ligne ?

    -
    Edité par MaurinGuay 19 octobre 2018 à 11:49:04

    • Partager sur Facebook
    • Partager sur Twitter
      19 octobre 2018 à 12:25:57

      Bonjour,

      Pas le choix ici ...

      SELECT
      	R.id_epreuve,
      	R.perf_mini,
      	E.date_performance,
      	E.lieu,
      	E.id_athlete
      FROM
      	(
      		-- Record par épreuve
      		SELECT id_epreuve, MIN( performance_numerique ) AS perf_mini
      		FROM sportif
      		GROUP BY id_epreuve
      	) R
      		INNER JOIN sportif E
      			ON R.id_epreuve = E.id_epreuve
      			AND R.perf_mini = E.performance_numerique

      Attention, si pour une même épreuve, plusieurs athlètes sont à égalité sur le record, alors la requête remontera plusieurs lignes (une par athlète) pour cette épreuve ...

      -
      Edité par Benzouye 19 octobre 2018 à 12:27:30

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        24 octobre 2018 à 17:47:28

        Parfait, merci j'avais donc bon :-)

        Merci

        • Partager sur Facebook
        • Partager sur Twitter

        Records Sportif

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown