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 :

Max sur une date par ID


Sujet :

Langage SQL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut Max sur une date par ID
    Bonjour,

    La question va vous sembler lambda mais voila ce que je cherche a faire sur cette table exemple :

    Champs :
    Date - ID - données champs A B C D E...
    25/03/2013 001
    26/04/2013 001
    27/05/2013 001
    27/02/2013 002
    27/02/2014 002
    28/05/2014 001

    Ce que je cherche à faire s'est de pouvoir récupérer l'ensemble des données de chaque ID pour laquelle la date est la MAX(Date).

    Mais je n'arrive qu'à sortir l'ensemble des notes pour laquelle la date est égale à ma date max (toutes mes notes situés sur 29/08/2014) ...

    résultat :
    Date - ID - données champs A B C D E...
    28/05/2014 001
    27/02/2014 002
    etc.
    Merci d'avance

  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonjour,

    Maintes fois posté sur le forum
    Une petite recherche et vous trouverez.

    Vous pourriez nous montrer votre requête sinon ?

    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  3. #3
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 192
    Billets dans le blog
    1
    Par défaut
    Allez, un petit coup de pouce : le plus simple, c'est de passer par une sous-requête portant que sur le MAX(DATE), ID

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut
    Ok je vais alors mieux chercher sur le forum

    sinon ma requête donnait pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM T47
    WHERE DAT01 IN (select max(DAT01 ) from T47)     ;

  5. #5
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 192
    Billets dans le blog
    1
    Par défaut
    Le IN ne fonctionnera pas, car tu dois le faire sur non pas un singleton, mais sur un couple de valeurs.

    Fais une jointure sur ta sous-requête, et ça ira beaucoup mieux

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut
    Un jointure entre quoi et quoi puisque l'ensemble de mes données se situent dans la même table ...

    Désolé, je ne suis pas un craque en SQL, mais j'espère pouvoir apprendre

    j'ai peut être trouvé un exemple que je peux réutiliser... je vous dis quoi !


    n'ayant pas encore les données dans mes tables ( contrôles des requêtes un peu compliqués .... cela vous parait-il plus cohérent ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT
      *
    FROM
      T1 AS A
      INNER JOIN
      (
        SELECT max(DAT) AS DATE, ID
        FROM   T1
        GROUP BY ID
      ) AS B
        ON DATE = DAT
           AND A.ID= B.ID
    ;

  7. #7
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 192
    Billets dans le blog
    1
    Par défaut
    C'est exactement ça

    Une autre variante, moins lisible je trouve, mais peut-être plus performante (à comparer) utilisant le WHERE plutôt qu'une jointure seraît :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select *
    from t1 a
    where t1.date in (select max(b.date) from t1 b where b.id = a.id);

    Mais la solution que vous avez trouvé, et qui est celle vers laquelle je vous ai orienté me semble plus sémantiquement "juste", et par conséquent est à privilégier tant que les performances sont suffisantes.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut
    super, bon j'ai rentré plusieurs lignes avec même ID dates différentes pour me conforter dans l'idée de ma requête et ca a l'air de passer impeccablement

    Merci pour ton aide ... ( il est vrai que le forum regorge d'exemple mais c'est plutôt noyé dans la masse :'( )

    Encore merci pour vos aides respectives ^^

  9. #9
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Puisque vous êtes dans la section SQL, il faut tout de même ajouter la solution suivante, qui sera certainement meilleure si toutefois votre SGBD la supporte :

    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
     
    WITH CTE AS(
        SELECT 
            ID
            , DAT
            , A
            , B
            , ...
            , ROW_NUMBER() OVER(PARTITION BY ID ORDER BY DAT DESC) AS RN
        FROM LaTable
    )
    SELECT
            ID
            , DAT
            , A
            , B
            , ...
    FROM CTE 
    WHERE Rn = 1

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

Discussions similaires

  1. [BI4] IDT - Filtre native max sur une date
    Par HudsonSaul dans le forum Designer
    Réponses: 1
    Dernier message: 01/06/2015, 18h47
  2. Requête SQL avec function MAX() sur une date
    Par mehdiyou1985 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 03/12/2012, 22h52
  3. Select avec max sur une date
    Par olibara dans le forum Requêtes
    Réponses: 10
    Dernier message: 06/07/2010, 08h18
  4. Réponses: 2
    Dernier message: 20/03/2009, 10h11
  5. fonction MAX sur une date
    Par Poisson59 dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 08/09/2006, 15h59

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