Afficher lignes en fonction des maximums d'une colonne

Fermé
dna.factory Messages postés 24957 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 26 avril 2024 - Modifié par dna.factory le 20/04/2016 à 16:26
dna.factory Messages postés 24957 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 26 avril 2024 - 25 avril 2016 à 07:23
Bonjour,
Bon déja ma question n'est pas claire... je m'en excuse, c'est aussi une des raisons pour laquelle j'ai besoin de votre aide (google c'est bien quand on sait ce qu'on veut, mais quand on ne sait pas, c'est plus compliqué).

j'ai une table formaté de la façon suivante :
client      |    valeur     | date
1 | 2 | 05/05
1 | 3 | 06/05
2 | 4 | 04/04
2 | 2 | 05/07
3 | 4 | 04/06


quelques précisions :

un client peut être présent 1 ou n fois
chaque tuple (client, valeur) ne peut être présent qu'une seule fois
la valeur de valeur est abstraite.
J'ai mis des ids clients par simplicités, mais il s'agit de noms
Je l'ai pas mis dans mon affichage, mais j'ai évidement une clé primaire en auto-increment qui peut être utilisée si nécessaire (elle s'appellera id)

ce que je veux, pour chaque client, afficher une seule ligne, celle pour la quelle la date est la plus élevée.

client      |    valeur     | date
1 | 3 | 06/05
2 | 2 | 05/07
3 | 4 | 04/06


Je fais des tests sous postgres, mais le résultat ne doit pas être dépendant du langage.

J'ai essayé avec des sous requêtes (en particulier la sous requête select nom, max(date) from table group by 1), mais le problème, c'est qu’apparemment, aucune sous requête n’accepte plusieurs lignes ET plusieurs colonnes.



Stop failing the turing test ! 
A voir également:

1 réponse

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
22 avril 2016 à 17:11
Bonjour,

Là comme ça à l'arrache ... un truc du genre devrait marcher :
SELECT T.*
FROM test T
,(
  SELECT MAX(t2.date) as maxDate,t2.`client`
  FROM test t2
  GROUP BY t2.`client`
)T2
WHERE T.date = T2.maxDate
GROUP BY T2.client

0
jee pee Messages postés 39650 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 26 avril 2024 9 238
23 avril 2016 à 12:22
Salut,

Je mettrais plutôt :

WHERE T.client = T2.client 
AND T.date = T2.maxDate


cdlt
0
dna.factory Messages postés 24957 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 26 avril 2024 1 609
25 avril 2016 à 07:23
ça parrait trop simple pour que je n'y ait pas pensé :) je vais regarder...
Au passage, j'ai fait super morche..
je concatène mes deux champs dans une première vue, et je sépare dans une deuxième, mais du coup ça restreint au langage de programmation (car la gestion de chaine de caractère, ça a tendence à être super spécifique);
0