Vous n'êtes pas identifié(e).
Pages : 1
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
Essayez cette requête :
SELECT view_id, max(date) as last_date FROM ViewUpdate GROUP BY view_id
Guillaume.
Hors ligne
Merci, j'ai déjà essayé mais je veux tout en retour en non que view_id
Hors ligne
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
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
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
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
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
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