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

Requêtes MySQL Discussion :

clause GROUP BY & récupérer derniere valeur


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 119
    Points : 68
    Points
    68
    Par défaut clause GROUP BY & récupérer derniere valeur
    Bonjour tlm.

    En fait je fait un group by dans une requete et je voudrait récupéré pour un champ récupérer la derniere valeur.

    par example si count(*) = 5, je veu récupéré la 5eme valeur pour le champ.

    en vous remerciant d'avance.

  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
    C'est quoi, la 5ième valeur ? Le MIN, le MAX ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 119
    Points : 68
    Points
    68
    Par défaut
    Je suis désolé, cest vrai que j'ai pas été tres précis.
    c est une table d'action qui au depart est journaliere , mais je souhaite obtenir des donné hebdomadaire

    Ma table est déclaré comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE `journee` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `id_action` mediumint(8) unsigned NOT NULL default '0',
      `date` date NOT NULL default '0000-00-00',
      `ouverture` double unsigned NOT NULL default '0',
      `plushaut` double unsigned NOT NULL default '0',
      `plusbas` double unsigned NOT NULL default '0',
      `fermeture` double unsigned NOT NULL default '0',
      `volume` int(11) NOT NULL default '0',
      PRIMARY KEY  (`id_action`,`date`),
      KEY `id_2` (`id`)
    ) TYPE=MyISAM
    pour récupéré en hebdomadaire, il me faut la valeur de la fermeture du dernier jour du group by.

    actuellement, ma requete est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT  id_action,date,ouverture,MAX(plushaut) as plushaut,MIN(plusbas) as plusbas,fermeture, SUM(volume) as volume
    		FROM journee
    		GROUP  BY id_action,YEAR(date),WEEK( date ) 
    		ORDER  BY DATE DESC
    donc je récupère la fermetue du premier jour ( enfin je croit ) faudrait je vérifie.

  4. #4
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT  id_action, YEAR(Date), WEEK(Date), b.fermeture, SUM(volume) as volume 
    FROM journee a INNER JOIN journee b ON a.id_ACtion  = b.Id_Action 
                                       AND YEAR(a.Date) = YEAR(b.Date)
                                       AND WEEK(a.Date) = YEAR(b.Date)
    WHERE b.Date = (SELECT MAX(Date) 
                    FROM journee c
                    WHERE a.id_action = c.id_action
                      AND YEAR(a.Date) = YEAR(c.Date)
                      AND WEEK(a.Date) = YEAR(b.Date))
    GROUP  BY a.id_action, YEAR(a.date), WEEK(a.date) 
    ORDER  BY YEAR(a.date), WEEK(a.date)  DESC
    Pas une bonne idée de donner comme nom de colonne un mot clé du langage !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 119
    Points : 68
    Points
    68
    Par défaut
    j ai renommé ma colonne date en date2 ( pour les tests ) ... mais la requette ne marche pas ... ca passe les sous -requete avec MySQL 4 ? j'ai simplifié la sous-requete.Quand je met une chaine de caractère ( par example '12-15-2004'), la requete fonctionne ....

    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
    Erreur
     
    requête SQL :  
     
    SELECT a.id_action, YEAR( a.date2 ) , WEEK( a.date2 ) , b.fermeture, SUM( a.volume ) AS volume
    FROM journee a
    INNER JOIN journee b ON a.id_ACtion = b.Id_Action AND YEAR( a.date2 ) = YEAR( b.date2 ) AND WEEK( a.date2 ) = WEEK( b.date2 ) 
    WHERE b.date2 = ( 
    SELECT date2 AS truc
    FROM journee
    LIMIT 1 ) 
    GROUP BY a.id_action, YEAR( a.date2 ) , WEEK( a.date2 ) 
    ORDER BY YEAR( a.date2 ) , WEEK( a.date2 ) DESC 
    LIMIT 0 , 30 
     
    MySQL a répondu:
     
     
    #1064 - Erreur de syntaxe près de 'SELECT date2 AS truc
    FROM journee
    LIMIT 1  ) 
    GROUP  BY a.id_act' à la ligne 5

  6. #6
    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
    Citation Envoyé par Stef784ever
    mais la requette ne marche pas ... ca passe les sous -requete avec MySQL 4 ?
    D'où l'intérêt de respecter les règles de ce forum : Nom et version du SGBDR...

    Les sous requêtes fonctionnent à partir de la 4.1.

  7. #7
    Membre régulier
    Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2003
    Messages : 94
    Points : 116
    Points
    116
    Par défaut
    si c'est du 4.0 faut obligatoirement passer par une table temporaire
    pour récupérer par semaine la date maximale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Create table JJ as
    SELECT YEAR( a.date2 ) AN, WEEK( a.date2 ) SEMAINE, MAX(a.date2) date2
    FROM journee a 
    GROUP BY YEAR( a.date2 ) , WEEK( a.date2 )
    Pour chacune des dates maximales, récupérer les autres infos dans la table principale

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select JJ.AN, JJ.SEMAINE, a.*
    FROM journee a, JJ 
    where JJ.date2 = a.date2
    order by 1,2
    avec 1 index sur a.date2

    ça marche si il n'y qu'un seul et unique enreg pour une date date2 donnée

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/08/2016, 08h27
  2. Réponses: 4
    Dernier message: 12/04/2008, 12h42
  3. Récupérer derniere valeur d'une zone de liste
    Par alexkickstand dans le forum IHM
    Réponses: 3
    Dernier message: 17/12/2007, 18h47
  4. groupe d'option : récupérer des valeurs
    Par mouaa dans le forum VBA Access
    Réponses: 3
    Dernier message: 03/08/2007, 12h33
  5. Récupérer la valeur d'un champ du dernier enregistrement
    Par Daniel MOREAU dans le forum Access
    Réponses: 1
    Dernier message: 14/04/2006, 20h01

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