Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 17/07/2013 10:31:37
- ant
- Membre
Group By problème
Bonjour.
Je viens juste de de passer de mysql à PgSql mais j'ai un problème avec mes group by.
Voici ma table
id, user_id, view_id et date
Je voudrai récupérer toutes les colonnes ayant la plus grande date avec in view_id distinct.
J'ai donc essayé:
SELECT *, max(date) as last_date FROM ViewUpdate GROUP BY view_id
Mais j'ai une erreur comme quoi le l'id doit être dans le group by, or si je mets l'id dans le group by je n'ai plu le résultat voulu. J'ai regardé quelques forums et ils parlent d'aggregation mais je ne sais pas du tout ce que c'est
Merci pour l'aide
Dernière modification par ant (17/07/2013 10:31:55)
Hors ligne
#2 17/07/2013 10:34:54
- gleu
- Administrateur
Re : Group By problème
Essayez cette requête :
SELECT view_id, max(date) as last_date FROM ViewUpdate GROUP BY view_id
Guillaume.
Hors ligne
#3 17/07/2013 10:36:11
- ant
- Membre
Re : Group By problème
Merci, j'ai déjà essayé mais je veux tout en retour en non que view_id
Hors ligne
#4 17/07/2013 11:24:05
- Geo-x
- Membre
Re : Group By problème
Bonjour ant,
je ne suis pas sûr de bien comprendre ce que tu souhaites comme résultat.
Peut-être la requête suivante pourra-t-elle répondre à ta question :
SELECT array_agg(id),view_id, max(date) as last_date FROM postr GROUP BY view_id;
Si la fonction array_agg() ne fonctionne pas, lances d'abord le code suivant dans la base de données voulue:
CREATE AGGREGATE array_agg (
sfunc = array_append,
basetype = anyelement,
stype = anyarray,
initcond = '{}'
);
En fait, cela va te créer un tableau de résultat.
Hors ligne
#5 17/07/2013 11:46:51
- gleu
- Administrateur
Re : Group By problème
Tout dépend du nombre de colonnes dans la table mais je trouve aussi que cette demande n'est pas claire. SI on veut des valeurs distinctes de view_id, on ne peut pas avoir les autres colonnes, cela n'a pas de sens.
Guillaume.
Hors ligne
#6 17/07/2013 13:40:26
- ant
- Membre
Re : Group By problème
par exemple
view_id | date | user_id
2 | 2013 | 23
3 | 2014 | 29
2 | 2015 | 34
(mes date sont au format ditetime mais c'est pour simplifier)
Les entités à retourner seraient 2;2015;34 et 3;2014;29
Dernière modification par ant (17/07/2013 13:41:24)
Hors ligne
#7 17/07/2013 14:46:44
- Geo-x
- Membre
Re : Group By problème
Dans ce cas, ta première requête est bonne, il ne te reste qu'à rempalcer * par les noms de tes champs. Par exemple :
SELECT id,view_id, max(date) as last_date FROM postr GROUP BY view_id,id;
Hors ligne
#8 17/07/2013 15:04:05
- ant
- Membre
Re : Group By problème
Non avec cette requête j'ai toutes mes colonnes:
Au lieu de 2;2015;34 | 3;2014;29
J'ai 2;2015;34 | 3;2014;29 | 2;2013;23
Je veux autant de sorties qu'il y ai de view_id différents
Hors ligne
#9 17/07/2013 22:36:04
- rjuju
- Administrateur
Re : Group By problème
Par définition, vous ne pouvez pas afficher d'autre colonnes que view_id si vous ne voulez que les view_id différents, à moins que vous n'ayez une contrainte d'unicité entre view_id et les autres champs, sinon il faut utiliser un aggrégat sur les autres champs également (min, max ...).
Julien.
https://rjuju.github.io/
Hors ligne
Pages : 1