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 :

[débutant] pb de group by


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Par défaut [débutant] pb de group by
    Bonjour,


    J'ai un petit soucis avec une requête, j'aimerais vos lumières !


    Voila, j'ai une table avec un id, un id de variable, une valeur (value) et une date pour cette valeur,
    l'unicité est définit par le triplet (id,id_var,date)

    par exemple :
    id varid value date
    1 age 12 01/01/2005
    1 age 13 01/01/2006
    1 age 14 01/01/2007
    1 taille 170 01/01/2005
    2 age 13 02/01/2005
    2 taille 130 02/01/2005


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select id, varid, max(date)
    from matable
    where id in(194,200)
    group by id, varid
    si je fais ça, je récupère pour chaque couple (id, varid) la date de dernière mise à jour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ID        VARID MAX(BODAT
    ---------- ----------- ---------
           200           1 21-AUG-06
           200           2 21-AUG-06
           200           3 21-AUG-06
           200           4 21-AUG-06
           200           5 21-AUG-06
           200           8 21-AUG-06
           200           9 18-AUG-06
           194           1 21-AUG-06
    Moi je voudrais en plus avoir la value pour chaque date max et je n'y arrive pas :-(

    Je fais qqch de ce genre là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select id, varid, max(date), value
     from matable
     group by id, varid;



    ps : mon champ ne s'appelle pas vraiment "date", je sais que c'est un mot réservé

  2. #2
    Membre émérite Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 16
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Par défaut
    Bonjour,

    Essaie cela pour voir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select mt1.id, mt1.varid, mt1.date, mt1.value
      from matable mt1
    where mt1.id in (194,200) 
       and mt1.date = ( select max(mt2.date)
                                 from matable mt2
                               where mt2.id =mt1.id
                            group by mt2.id, mt2.varid
                             )
    a+

  3. #3
    Membre émérite Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Par défaut
    ceci marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     select bocodif_id, bovar_varid, mydate, bodata_value
     from (
     select bocodif_id as id, bovar_varid as varid, max(bodata_date) as mydate
     from bodata
     where bocodif_id = 200
     group by bocodif_id, bovar_varid
    ), bodata
    where
    id = bocodif_id and varid = bovar_varid and mydate = bodata_date;

    mais ça m'ennuie de faire une jointure, la table est énorme.

    Il n'y a aucun moyen de faire ça d'un coup ?

    edit : ça prend vraiment 3 plombes... Je vais essayer de mettre un numéro de séquence plutôt qu'un triplet comme clé primaire, ça accélerera peut-être un peu...

Discussions similaires

  1. [2007][Débutant]Création de groupes d'utilisateurs?
    Par Oceliane dans le forum Sécurité
    Réponses: 2
    Dernier message: 28/08/2007, 12h14
  2. [débutant]Ajouter un Serveur à un Serveur Group
    Par AF_STjohn dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 10/06/2005, 16h42
  3. [débutant] problème avec Group by
    Par Amenofis dans le forum Débuter
    Réponses: 5
    Dernier message: 25/05/2005, 09h57
  4. [CR][.NET][Débutant] Création d'un Etat groupé
    Par SoaB dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 09/05/2005, 14h28
  5. [Débutant][VB 5.0] Obtenir les groupes locaux W2K
    Par Banana_Ultra dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 01/10/2004, 14h07

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