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 :

Maximum d'une soustraction


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 172
    Points : 100
    Points
    100
    Par défaut Maximum d'une soustraction
    Bonjour,

    j'ai un site de pronostics du championnat de foot.
    j'ai une table phpl_pronos_graph qui contient les classements des différents pronostiqueurs à chaque journée de championnat. Je voudrais récupérer les pronostiqueurs ayant fait les plus fortes progressions dans le classement durant la derniere journee.
    Alors pour récupérer la derniere journee, je fais la requete suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT max(fin) FROM phpl_pronos_graph
    'fin' étant de numéro de la journée de championnat.

    Pour récuperer le classement des pronostiqueurs lors de la derniere journee de championnat, je fais la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_membre, fin, classement, points, participations 
    FROM phpl_pronos_graph
    WHERE fin = (SELECT max(fin) FROM phpl_pronos_graph)
    et pour l'avant-derniere journee de championnat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_membre, fin, classement, points, participations 
    FROM phpl_pronos_graph
    fin = ((SELECT max(fin) FROM phpl_pronos_graph)-1)
    Mon probleme est de faire la difference des 2 journees pour chaque pronostiqueur, et d'en trouver le max.
    Il me faudrait une requete du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT MAX
    (
    SELECT id_membre, fin, classement, points, participations 
    FROM phpl_pronos_graph
    WHERE fin = (SELECT max(fin) FROM phpl_pronos_graph)
    -
    SELECT id_membre, fin, classement, points, participations 
    FROM phpl_pronos_graph
    WHERE fin = ((SELECT max(fin) FROM phpl_pronos_graph)-1)
    )
    FROM phpl_pronos_graph
    Bien sur, cela ne marche pas...

    J'espere que je suis clair...

    Est ce que quelqu'un aurait une idée ??

    Merci d'avance

    Thomas

  2. #2
    Membre régulier
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Points : 122
    Points
    122
    Par défaut
    Bonjour,

    voici ce que j'ai réalisé. J'utilise des vues mais tu peux peut-être t'en passer.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    CREATE TABLE TEMP_PRONOS (
    	ID			INT IDENTITY(1,1),
    	VAL			INT,
    	DATEJOUR	DATETIME,
    	IDMEMBER	INT
    );
     
     
    SET DATEFORMAT YMD
     
    INSERT INTO TEMP_PRONOS VALUES (100,'2006-08-10',1);
    INSERT INTO TEMP_PRONOS VALUES (150,'2006-08-10',2);
    INSERT INTO TEMP_PRONOS VALUES (200,'2006-08-10',3);
    INSERT INTO TEMP_PRONOS VALUES (300,'2006-08-11',1);
    INSERT INTO TEMP_PRONOS VALUES (400,'2006-08-11',2);
    INSERT INTO TEMP_PRONOS VALUES (500,'2006-08-11',3);
     
     
    SELECT	P1.VAL-P2.VAL
    FROM	TEMP_PRONOS P1
    JOIN	TEMP_PRONOS P2
    	ON P1.IDMEMBER=P2.IDMEMBER
    WHERE	P1.DATEJOUR='2006-08-10'
    AND		P2.DATEJOUR='2006-08-11';
    Après t'as qu'à remplacer les dates des filtres WHERE par le max et le max+1.

    Si t'as des questions ...
    Bye

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 172
    Points : 100
    Points
    100
    Par défaut
    Merci pour ta réponse.
    D'après ce que je comprends, tu crées une table temporaire. C'est ça que tu appelles 'Vue' ?

    J'aurais aimé pouvoir le faire sans passer par une table temporaire, mais j'ai peur que ça soit impossible.

    En tout cas merci pour ta solution.

    Thomas

  4. #4
    Membre régulier
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Points : 122
    Points
    122
    Par défaut
    Non en fait, j'avais mis une première version de code en utilisant des vues.
    J'ai ensuite réédité mon message où j'ai changé le code, j'ai fait plus simple sans utiliser des vues mais je n'ai pas modifié la première ligne.
    Avec l'exemple que je t'ai donné, il n'y a pas de vues, c'est une requête normale. Comme tu travailles avec la même table, tu es obligé de mettre en jointures la même table...

    ++

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 172
    Points : 100
    Points
    100
    Par défaut
    ah ok
    merci ça marche pas mal.
    J'arrive pas à récuperer le max mais c'est pas grave, le max je le trouverai en php

    Merci beaucoup !

  6. #6
    Membre régulier
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Points : 122
    Points
    122
    Par défaut
    Voici une solution intégrant le maximum de la date du jour:

    SELECT P1.VAL-P2.VAL AS DIFF
    FROM TEMP_PRONOS P1
    JOIN TEMP_PRONOS P2
    ON P1.IDMEMBER=P2.IDMEMBER
    WHERE P1.DATEJOUR=(SELECT MAX(DATEJOUR) FROM TEMP_PRONOS)
    AND P2.DATEJOUR = DATEADD(DAY,-1,P1.DATEJOUR)

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 172
    Points : 100
    Points
    100
    Par défaut
    en fait, mon champ date est un numéro de journée (de championnat), donc c'est un entier. Je fais donc juste un -1 pour avoir la date de la journée d'avant, et je n'utilise pas DATEADD (que je connaissai pas d'ailleurs, merci ).

    Moi je voulais le max de la soustraction... Tu crois que c'est jouable dans la meme requete ?

  8. #8
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par ruda.tom
    Moi je voulais le max de la soustraction... Tu crois que c'est jouable dans la meme requete ?
    Selon ce qu'a dit etienne, as-tu essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT MAX(P1.VAL-P2.VAL) AS DIFF
      FROM TEMP_PRONOS P1 JOIN TEMP_PRONOS P2 ON P1.IDMEMBER=P2.IDMEMBER
     WHERE P1.DATEJOUR = (SELECT MAX(DATEJOUR) FROM TEMP_PRONOS)
       AND P2.DATEJOUR = P1.DATEJOUR - 1

Discussions similaires

  1. Une soustraction en sql?
    Par kissmytoe dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/02/2006, 15h52
  2. Réponses: 2
    Dernier message: 22/01/2006, 02h11
  3. Maximum d'une liste
    Par deubal dans le forum Langage
    Réponses: 3
    Dernier message: 02/12/2005, 02h49
  4. arrondir un nombre découlant d'une soustraction de date
    Par bertrand_declerck dans le forum Langage
    Réponses: 2
    Dernier message: 17/08/2005, 14h51
  5. Aide sur une soustraction
    Par Job dans le forum Langage SQL
    Réponses: 3
    Dernier message: 06/07/2005, 11h44

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