tri avant group by

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : tri avant group by

Re: tri avant group by

par moogli » 14 août 2013, 13:20

Donc max(id) avec un group by catégorie pour alimenter le subselect de mon 1er exemple ;)

D'ailleurs j'ai laissé une ânerie ce n'est un égale mais un in qu'il faut utiliser avant le subselect.

Select * from latable where id in ( select max(id) from table where catégorie <> 'la mauvaise catégorie')

Test le subselect seul pour vérifier qu'il retourne bien ce que tu veux ;)



@+

Re: tri avant group by

par Macfplus » 14 août 2013, 10:35

Bonjour Moogli.
Merci de ton aide, mais en fait ce n'est pas ce que je cherche.
Ce que tu me propose va aller chercher le dernier enregistrement toutes catégories confondues sauf categorie indesirable.

Or ce que je cherche à faire c'est d'afficher le dernier enregistrement de chaque categorie, sauf categorie indesirable, et de les afficher du plus récent au plus ancien.

Ce qui explique pourquoi je cherchais à utiliser group by, mais ce n'est pas approprié visiblement

Re: tri avant group by

par moogli » 14 août 2013, 07:49

salut,


group y ne s'utilise qu'avec les fonctions de groupe, comme max, count, sum etc.

dans ton cas pour avoir le dernier enregistrement, tu peux utiliser un
SELECT * FROM matable WHERE id_matable = (select max(id_matable ) from matable where categorie_matable != 'mauvaisecategorie') ORDER BY id_matable DESC
ou, si tu utilise mysql tu peux utiliser la clause limit
SELECT * FROM matable WHERE categorie_matable != 'mauvaisecategorie') ORDER BY id_matable DESC limit 1
avec Oracle tu peux utiliser rownum (where rownum=1).


avec tous le monde tu peux utiliser les fonctions olap(rank(), dense rank etc) pour le faire.

@+

Re: tri avant group by

par Macfplus » 14 août 2013, 01:50

Hello!
En fait ça me semblait la meilleure solution vu que je ne veux qu'une réponse par categorie_matable (la derniere donnée enregistrée à chaque fois).

J'ai aussi essayé avec distinct mais là il ne me renvoie aucune réponse...

tu ferais autrement?

Merci

Re: tri avant group by

par xTG » 13 août 2013, 20:21

Pourquoi un group_by ?

tri avant group by

par Macfplus » 13 août 2013, 17:51

bonjour,
J'ai une table dans laquelle j'ai notament les colonnes id_matable, categorie_matable, date_matable
Je cherche à afficher du plus récent au plus vieux le dernier élément de chaque catégorie en excluant une catégorie que je ne veux pas afficher...

J'ai donc tenté :
SELECT * from matable WHERE categorie_matable != 'mauvaisecategorie'  GROUP BY categorie_matable ORDER BY id_matable DESC
et
SELECT * from (SELECT * from matable WHERE categorie_matable != 'mauvaisecategorie' ORDER BY id_matable DESC) as t GROUP BY categorie_matable
et
SELECT * from (SELECT * from matable WHERE categorie_matable != 'mauvaisecategorie' ORDER BY id_matable DESC) as t GROUP BY categorie_matable ORDER BY id_matable DESC
le souci c'est qu'à chaque fois il m'afficher les premiers éléments de ma table et non les derniers
par contre
SELECT * from matable WHERE categorie_matable != 'mauvaisecategorie' ORDER BY id_matable DESC
affiche bien dans le bon ordre, c'est à dire du plus récent au plus anciens, mais il affiche évidament toutes les lignes de chaque catégories...
Je pense que mon erreur est très bête mais je bloque dessus depuis un moment et tourne en rond alors si vous pouvez maider ce serait sympa.

Merci à vous

Bonne fin de journée :wink: