0
votes

Si deux rangées ont la même carte d'identité mais différente Col2, comment ne pouvez-vous garder que celles qui ont max col3?

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: < Pré> xxx

Je veux garder seulement le tuple (1, B, 5, 3). Comment puis-je réaliser cela?

J'ai essayé ceci: xxx

mais je reçois une erreur disant que ce n'est pas un groupe valide par déclaration.


1 commentaires

Quand vous dites "garder seulement ..." - qu'entendez-vous par là? Voulez-vous Supprimer des lignes de la table? Ou voulez-vous simplement dire dans un rapport (techniquement, dans une instruction SQL )? 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 , que voulez-vous garder? Toutes ces lignes (avec la valeur max dans col3 )? Ou juste l'un d'entre eux - et ensuite, lequel?


3 Réponses :


0
votes

Vous pouvez utiliser garder : xxx

ou: xxx


0 commentaires

0
votes

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
)


0 commentaires

0
votes

Sélectionnez * à partir du nom de Tableau où Col3 = (Sélectionnez Max (Col3) de Tablename)


0 commentaires