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 :

Aggrégation sans tenir compte d'un champ


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 60
    Points
    60
    Par défaut Aggrégation sans tenir compte d'un champ
    Bonjour,

    j'ai une table du type:

    client canal date_a date_b
    xxx 2 12/05/14 13/05/14
    xxx 2 12/05/14 02/06/14
    xxx 5 29/05/14 02/06/14


    Je souhaiterai ne garder qu'une ligne par date_b et garder la date_a max associée ainsi que son canal.

    client canal date_a date_b
    xxx 2 12/05/14 13/05/14
    xxx 5 29/05/14 02/06/14

    J'ai tenté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select
    ccli, cproduit,  date_b, canal, max(date_a)
    from
    Table 
    group by 1,2,3,4
    sauf que comme la valeur de mon champ canal est différente pour les 2 dates_a associcées à date_b=02/06/14, les 2 lignes sont conservées.

    Si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select
    ccli, cproduit,  date_b, max(date_a)
    from
    Table 
    group by 1,2,3
    J'ai les lignes que je veux sauf qu'il me manque la colonne canal.

    Merci pour votre aide.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    Toutes les colonnes qui ne font pas l'objet d'une agrégation doivent être spécifiée dans la clause GROUP BY.
    Citation Envoyé par lozeba Voir le message
    sauf que comme la valeur de mon champ canal est différente pour les 2 dates_a associcées à date_b=02/06/14, les 2 lignes sont conservées.
    Dans ce cas, quelle valeur de canal faut-il garder ?

    Tatayo.

    P.S. pour plus de clarté dans tes requêtes, utilises les noms des colonnes dans le group by...

  3. #3
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 60
    Points
    60
    Par défaut
    Merci pour ta réponse.

    Il faut garder la valeur de canal qui correspond à la date_a la plus récente.

    Dans mon exemple, canal doit avoir avoir la valeur 5 (même ligne que le 29/05/14 qui est la date_a la plus grande)

    En gros, il me faudrait une sorte de canal = canal where date_a=max(date_a)

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Dans ce cas ce n'est pas un regroupement qu'il faut faire (d'ailleurs tu ne fais aucune agrégation...).
    Il faut chercher les lignes pour lesquelles il n'en n'existe pas avec:
    • Le même client
    • La même date A
    • Une date B supérieure

    C'est faisable de plusieurs façon: avec une jointure externe, un not exists... Cette question revient régulièrement sur le Forum.
    Je te laisse un peu chercher, avec les éléments que j'ai donné tu devrais trouver la réponse .

    Tatayo.

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    En effet, besoin très récurrent

    Exemple récent : http://www.developpez.net/forums/d15...-aide-requete/

  6. #6
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 60
    Points
    60
    Par défaut
    Merci pour votre aide.
    Cependant, je ne vois pas comment sélectionner ma date_a max sans aggrégation ? :/

    EDIT : J'y suis arrivée !=)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/01/2007, 11h28
  2. Réponses: 4
    Dernier message: 04/11/2006, 20h36
  3. [if pos()] sans tenir compte majuscules/minuscules
    Par Droïde Système7 dans le forum Delphi
    Réponses: 2
    Dernier message: 28/09/2006, 17h33
  4. Réponses: 1
    Dernier message: 17/08/2006, 20h27
  5. faire une recherche sans tenir compte de la casse
    Par richard038 dans le forum SQL
    Réponses: 5
    Dernier message: 11/10/2005, 09h07

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