[SQL] Distinct

Distinct [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 31-05-2005 à 16:04:09    

:hello:  
 
La fonction distinct permet de n'avoir en sortie que les lignes qui sont distincte l'un de l'autre.
 
Je voudrais n'avoir en sortie que les lignes dont une colonne (pas toutes) soit distincte
 
 
ex:
 


rapport |  etat
1       |  1
1       |  2
1       |  3
2       |  1
3       |  1


 
Avec ou sans distinct j'obtiens ce resultat.
 
Voici le resultat que j'amerais avoir
 


rapport |  etat
1       |  3
2       |  1
3       |  1


 
J'aimerais que le rapport soit unique et que l'état soit le maximum.
Dans ce cas on a gardé qu'un seul rapport 1 et c'est celui avec le plus gd etat (3)
 
C'est possible de faire cela en une seul requete? Avec plusieurs requetes je n'ai pas de pb pour le faire mais en une seul ce serait mieux ^^

Reply

Marsh Posté le 31-05-2005 à 16:04:09   

Reply

Marsh Posté le 31-05-2005 à 16:08:23    

select imbriqué?

Reply

Marsh Posté le 31-05-2005 à 16:14:31    

Après avoir essayer avec une petite requete c'est facilement faisable :-/

Reply

Marsh Posté le 31-05-2005 à 16:18:51    

je vais regardé de ce coté demain matin alors  
 
merci

Reply

Marsh Posté le 31-05-2005 à 16:21:21    

Oublie le distinct et utilise un group by
A+

Reply

Marsh Posté le 01-06-2005 à 09:11:01    

mmh
j'ai a peu près le même problème
en fait, utilise le distinct ET le group by avec un max :
 
select distinct rapport, max(etat) from tatable group by rapport

Reply

Marsh Posté le 01-06-2005 à 09:53:00    

Tu peux me dire a quoi sety ton distinct ici?

Reply

Marsh Posté le 01-06-2005 à 10:12:00    

a changer l'ordre de tri :)  
 
 
 
(c véridique après test mais bon, je sors quand même, ca sert à rien)

Reply

Marsh Posté le 01-06-2005 à 10:34:19    

c'est exactement ce que j'ai fait (sans le distinct)., J'ai éjouté l'ordre de tri avec un ORDER BY uisque ca sert a ca
 
select distinct rapport, max(etat) from tatable group by rapport ORDER BY max(rapport)
 

Reply

Marsh Posté le 01-06-2005 à 11:36:42    

1. ton order by est faux, un simple order by rapport suffit
2. je persiste ton distinct ne te sert a rien

Reply

Marsh Posté le 01-06-2005 à 11:36:42   

Reply

Marsh Posté le 01-06-2005 à 12:18:49    

:heink:
 
Virez-moi ce "distinct", il est déjà fait par le GROUP BY

Reply

Marsh Posté le 01-06-2005 à 12:55:47    

DISTINCT:
j'avais copié la ligne de denzz et ai oublié de l'enlever.
 
ORDER BY:
La encore j'a commis une erreur :/
 
 
select rapport, max(etat) from tatable group by rapport ORDER BY max(date)  
 
La date étant associé à un etat. J'ai été obligé d mettre le max() car autrement je devait mettre "date" dans le group by ce qui donne alors un résultat faux.

Reply

Marsh Posté le 01-06-2005 à 16:07:05    

Mets plutôt :
 
select rapport, max(etat) as maxdate from tatable group by rapport ORDER BY maxdate  
 
Ca change rien, mais c'est plus joli

Reply

Marsh Posté le 01-06-2005 à 16:21:03    

Arjuna a écrit :

Mets plutôt :
 
select rapport, max(etat) as maxdate from tatable group by rapport ORDER BY maxdate  
 
Ca change rien, mais c'est plus joli


 
select rapport, max(etat), max(date) as maxdate from tatable group by rapport ORDER BY maxdate  
 
ca serait pas plutot ca ? max(etat) n'est pas la clause de son order by !  

Reply

Marsh Posté le 01-06-2005 à 16:45:43    

ha oui, en effet, c'est quoi ce truc de date d'abors ?
 
là, t'as mal mon coco, tu pourras pas faire le order by aussi simplement...

Reply

Marsh Posté le 01-06-2005 à 16:48:13    

Code :
  1. select distinct t1.rapport, (select max(t2.etat) from tatable t2 where t2.rapport = t1.rapport) maxetat, (select max(t3.date) from tatable t3 where t3.rapport = t1.rapport) maxdate
  2. from tatable t1
  3. order by maxdate


 
:sol:
 
PS: si c'est une requête qui doit tourner sous MySQL, vérifie que t'as la dernière version, ou alors achète une codre :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed