#1 Mon 07 October 2013 12:12
- fansz
- Participant actif
- Date d'inscription: 12 Jan 2010
- Messages: 104
[POSTGRESQL ]Requete SQL
Bonjour,
J'ai une requête SQL à faire avec POSTGRESQL sur un tableau similaire au tableau suivant
Id STATUT DATE
1 | bon | 2013-05-10
2 | moyen | 2013-05-12
3 | bon | 2013-05 -20
4 | bon | 2013-05- 21
5 | mauvais | 2013-05- 28
6 | moyen | 2013-05 -30
Mon but et de pouvoir avoir les statuts ayant la date la plus récente donc d'avoir le résultat suivant avec id :
4 | bon | 2013-05- 21
6 | moyen | 2013-05 -30
5 | mauvais | 2013-05- 28
Est-ce possible ? j'ai essayé de faire un ceci (select ID,STATUT,max(date) from test GROUP BY STATUT) mais cela ne permet pas de récupérer le champs identifiants.
Merci
Hors ligne
#2 Mon 07 October 2013 12:36
Re: [POSTGRESQL ]Requete SQL
Bonjour,
Peut être cela ?
Code:
select max(ID),STATUT,max(date) from test GROUP BY STATUT
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#3 Mon 07 October 2013 13:16
Re: [POSTGRESQL ]Requete SQL
Bonjour,
le requête proposée par Yves fonctionne dans ce cas, mais si votre identifiant n'est pas chronologique (par exemple le relevé 1 à la date du relevé 4 et vice-versa) alors le résultat sera faux ( pour le statut bon nous aurons toujours l'identifiant 4 et la date ' 2013-05- 21' alors que nous serions ne droit d'attendre les valeurs 1 et '2013-05-21'.
Il est faut plutôt faire ceci :
Code:
select ID, STATUT, date from test WHERE (statut, date) IN (SELECT statut, max(date) FROM test GROUP BY statut)
Dernière modification par MathieuB (Mon 07 October 2013 13:17)
Mathieu BOSSAERT
Association GeoRezo
Hors ligne
#4 Mon 07 October 2013 17:24
- simo lay
- Participant assidu
- Date d'inscription: 8 Dec 2011
- Messages: 172
Re: [POSTGRESQL ]Requete SQL
Bonjour,
Avec cette requête ça devrai marché
Code:
select id,statut,date, statut||date from table where statut||date in (select statut||max(date) from table group by statut ) as t
Dernière modification par simo lay (Mon 07 October 2013 17:38)
Hors ligne
#5 Tue 08 October 2013 12:35
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3941
Re: [POSTGRESQL ]Requete SQL
Bonjour,
Simo Lay, j'aimerais bien comprendre pourquoi vous proposez la concaténation des champs statut et date? Même s'il me semble que le résultat obtenu sera le même que celui de Mathieu, n'est-ce pas compliquer les choses "un peu pour rien"?
Cordialement,
Hors ligne
#6 Tue 08 October 2013 13:21
- simo lay
- Participant assidu
- Date d'inscription: 8 Dec 2011
- Messages: 172
Re: [POSTGRESQL ]Requete SQL
Non absolument pas pour compliquer les choses, j'ai pris la première requête qui m'a tomber sur la tête et qui permet de répondre à la question de fansz. c'est tous.
Cordialement.
Hors ligne
#7 Tue 08 October 2013 14:50
- Marie S.
- Participant actif
- Lieu: Paris
- Date d'inscription: 30 Nov 2005
- Messages: 88
Re: [POSTGRESQL ]Requete SQL
En utilisant la fonction rank() ça marche très bien :
Code:
SELECT id, status, date FROM (SELECT id, status, date, rank() OVER (PARTITION BY status ORDER BY date DESC) as pos FROM test) as t WHERE pos = 1
Plus d'info sur la fonction: http://www.postgresql.org/docs/9.3/stat … indow.html
Marie
Hors ligne
#9 Wed 09 October 2013 09:36
- fansz
- Participant actif
- Date d'inscription: 12 Jan 2010
- Messages: 104
Re: [POSTGRESQL ]Requete SQL
Grand Merci à tous , j'ai utilisé la requête avec la fonction RANK de Marie S. qui fonctionne parfaitement
Hors ligne