J'ai une table avec trois colonnes (ID, Col2, Col3, Col4) où Col2 est A ou B et Col3 et Col4 sont des entiers. Mon problème est que de nombreuses colonnes ont le même identifiant et une valeur de COL2 différente, et je souhaite sélectionner uniquement les lignes ayant une valeur maximale dans Col3.
Par exemple, si nous avons: P> < Pré> xxx pré>
Je veux garder seulement le tuple (1, B, 5, 3). Comment puis-je réaliser cela? P>
J'ai essayé ceci: p> mais je reçois une erreur disant que ce n'est pas un groupe valide par déclaration. p> p>
3 Réponses :
Vous pouvez utiliser ou: p> garder code>:
Cette requête:
select t.* from tablename t inner join ( select id, max(col3) col3 from tablename group by id having count(distinct col2) > 1 ) g on g.id = t.id and g.col3 = t.col3 union all select t.* from tablename t where not exists ( select 1 from tablename where id = t.id and col2 <> t.col2 )
Sélectionnez * à partir du nom de Tableau où Col3 = (Sélectionnez Max (Col3) de Tablename) P>
Quand vous dites "garder seulement ..." - qu'entendez-vous par là? Voulez-vous
Supprimer code> des lignes de la table? Ou voulez-vous simplement dire dans un rapport b> (techniquement, dans une instruction code> SQL code>)? Les deux interprétations différentes sont très différentes. Ensuite, si vous avez plusieurs lignes pour un seul identifiant, mais deux ou plus (ou même toutes) ont la même valeur la plus élevée dans
col3 code>, que voulez-vous garder? Toutes ces lignes (avec la valeur max dans
col3 code>)? Ou juste l'un d'entre eux - et ensuite, lequel?