Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/02/2011, 20h32   #1
Invité de passage
 
Inscription : mai 2008
Messages : 22
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 22
Points : 0
Points : 0
Par défaut Plus petite valeur, sous groupe

Bonjour

je cherche en vain la requête qui me permettra de sélectionner les lignes qui ont la plus petite valeur d'un champ mais d'un groupe (champ) particulier. Voici

id group item
1 a 123
2 a 122
3 a 432
4 b 22
5 b 21


Donc, je veux le id 2 et 5 puisque l'item à la valeur la plus basse par rapport au champ "group"

Merci

MartinF
martinfa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 22h56   #2
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Bonjour,

peut être quelque chose comme ceci (sans être sur...) :

Code :
1
2
3
4
 
SELECT id OVER(PARTITION BY 'group' ORDER BY item)
FROM uneTable
GROUP BY 'group'
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 09h07   #3
Membre confirmé
 
Homme
Inscription : janvier 2006
Messages : 227
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Corse (Corse)

Informations forums :
Inscription : janvier 2006
Messages : 227
Points : 239
Points : 239
quelque chose comme ça
Code :
SELECT * FROM ma_table  WHERE item IN (SELECT min(item) FROM ma_table GROUP BY grp)
xavier-Pierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 14h40   #4
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 483
Points : 1 483
Citation:
Envoyé par Madfrix Voir le message
Bonjour,

peut être quelque chose comme ceci (sans être sur...) :

Code :
1
2
3
4
 
SELECT id OVER(PARTITION BY 'group' ORDER BY item)
FROM uneTable
GROUP BY 'group'
Qui ne fonctionne, pour info, qu'à partir de la version Postgresql 8.4 qui intègre les fonctions analytiques
__________________
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/
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2011, 19h06   #5
Membre confirmé
 
Avatar de Jihnn
 
Inscription : décembre 2005
Messages : 330
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 330
Points : 216
Points : 216
À ma connaissance, la requête qu'a proposé Madfrix ne fonctionnera pas, mais l'idée d'utiliser les fonctions analytiques est excellente. J'aurais fait comme ceci :

Code :
1
2
3
4
5
6
7
WITH TT AS (
    SELECT id, rank() OVER (PARTITION BY "group" ORDER BY item) R
    FROM la_table
)
SELECT id
  FROM la_table
 WHERE R = 1;
Jihnn est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h20.


 
 
 
 
Partenaires

Hébergement Web