Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1555 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Distinct

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] Distinct

n°1103067
ffomnislas​h
Posté le 31-05-2005 à 16:04:09  profilanswer
 

: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 ^^

mood
Publicité
Posté le 31-05-2005 à 16:04:09  profilanswer
 

n°1103072
koude
Posté le 31-05-2005 à 16:08:23  profilanswer
 

select imbriqué?

n°1103079
koude
Posté le 31-05-2005 à 16:14:31  profilanswer
 

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

n°1103084
ffomnislas​h
Posté le 31-05-2005 à 16:18:51  profilanswer
 

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

n°1103088
koude
Posté le 31-05-2005 à 16:21:21  profilanswer
 

Oublie le distinct et utilise un group by
A+

n°1103662
denzz
huhuuuuu ! (désolé )
Posté le 01-06-2005 à 09:11:01  profilanswer
 

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

n°1103723
koude
Posté le 01-06-2005 à 09:53:00  profilanswer
 

Tu peux me dire a quoi sety ton distinct ici?

n°1103772
denzz
huhuuuuu ! (désolé )
Posté le 01-06-2005 à 10:12:00  profilanswer
 

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

n°1103823
ffomnislas​h
Posté le 01-06-2005 à 10:34:19  profilanswer
 

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)
 

n°1103911
koude
Posté le 01-06-2005 à 11:36:42  profilanswer
 

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

mood
Publicité
Posté le 01-06-2005 à 11:36:42  profilanswer
 

n°1103969
Arjuna
Aircraft Ident.: F-MBSD
Posté le 01-06-2005 à 12:18:49  profilanswer
 

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

n°1104028
ffomnislas​h
Posté le 01-06-2005 à 12:55:47  profilanswer
 

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.

n°1104279
Arjuna
Aircraft Ident.: F-MBSD
Posté le 01-06-2005 à 16:07:05  profilanswer
 

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

n°1104300
denzz
huhuuuuu ! (désolé )
Posté le 01-06-2005 à 16:21:03  profilanswer
 

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 !  

n°1104354
Arjuna
Aircraft Ident.: F-MBSD
Posté le 01-06-2005 à 16:45:43  profilanswer
 

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

n°1104363
Arjuna
Aircraft Ident.: F-MBSD
Posté le 01-06-2005 à 16:48:13  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Distinct

 

Sujets relatifs
Lister toutes les requettes SQL du projet en PHP ?[PHP - SQL] Recherche dans un catalogue via thème ou mot-clé
error in your SQL syntax[SQL Server] aide pour faire une requète avec un MAX()
lien d'une image en fonction d'une table SQL[SQL] jointure particuliere
Raaah le SQL... Probleme de jointure[SQL] Distinct sur un champ
[ASP][SQL] comment faire un SELECT DISTINCT en ayant plusieurs champs?[SQL] un select distinct qui trie tout seul et je n en veux pas!!!!
Plus de sujets relatifs à : [SQL] Distinct


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR