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

PostgreSQL Discussion :

Maximum date trié par un attribut


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 12
    Par défaut Maximum date trié par un attribut
    Bonjour,

    J'ai une table contenant entre autres un id, une date ( YYYY-MM-dd), et un attribut de type character varying:
    1, 2011-01-10, F1
    2, 2011-01-11, F1
    3, 2011-01-10, F2
    4, 2011-01-12, F2

    je voudrais donc récupérer les lignes qui ont une date la plus avancée pour chaque attribut.
    Donc ici :
    2, 2011-01-11, F1
    4, 2011-01-12, F2

    J'arrive bien à récupérer le couple date, attribut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select max(date),attribut from matable group by attribut
    mais je veux toute la ligne ( j'ai bien sûr d'autres attributs dans ma table).

    Si vous pouviez m'aidez

    Merci

  2. #2
    Membre Expert Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Par défaut
    Admettons que tes colonnes s'appellent c1,c2 et c3

    Si tu es en Postgresql 8.4 ou plus, tu peux utiliser les fonctions de fenêtrage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT c1,c2,c3 FROM
    (
    SELECT 
    RANK() OVER (PARTITION BY c3 ORDER BY c2 DESC) as rang,
    c1,
    c2,
    c3
    FROM la_table
    ) AS A
    WHERE A.rang = 1;
    Sinon il faut faire une sous-requête ce qui est un peu moins lisible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT t.c1, t.c2, t.c3 FROM t, 
    (
    SELECT 
    c3,max(c2) as max_c2
    from t
    group by c3
    ) as A
    where t.c2 = A.max_c2 and t.c3 = A.c3;
    Si tu as d'autres colonnes dans ta table, il faut les énumérer dans les select à côté de 'c1'
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  3. #3
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 12
    Par défaut
    Parfait !!!

    la seconde solution est pour moi. Je vais exécuter cette requête en JPA.

    Merci !

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Ou encore une autre solution sans les sous-requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT t1.c1, t1.c2, t1.c3 
    FROM t AS t1
    INNER JOIN t AS t2 ON t1.c3 = t2.c3
    GROUP BY t1.c1, t1.c2, t1.c3
    HAVING t1.c2 = MAX(t2.c2)
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

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

Discussions similaires

  1. [SQL-VBA]tri par date dans access
    Par Mickey_Mouse dans le forum VBA Access
    Réponses: 5
    Dernier message: 06/02/2007, 09h49
  2. Optimisation d'un tri par date
    Par padawa dans le forum Requêtes
    Réponses: 7
    Dernier message: 12/05/2006, 15h48
  3. requete : tri par date + groupement
    Par cbe dans le forum Requêtes
    Réponses: 8
    Dernier message: 08/01/2006, 19h30
  4. tri par date
    Par Digiduck dans le forum Requêtes
    Réponses: 5
    Dernier message: 06/06/2005, 21h51
  5. [ XML ][ XSL ] tri par date
    Par zozolh2 dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/08/2004, 10h19

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