banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

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

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1230
Site web

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

 

#8 Tue 08 October 2013 15:19

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1230
Site web

Re: [POSTGRESQL ]Requete SQL

Très belle alternative !


Mathieu BOSSAERT
Association GeoRezo

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

 

Pied de page des forums

Powered by FluxBB