Vous n'êtes pas identifié(e).

#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 ...).

Hors ligne

Pied de page des forums