ВЫБЕРИТЕ ТОП из каждой группы

Извините, ребята, я схожу с ума от этого...

Мой стол:

ID Name       Surname     Capital       Capital_Group   Job      Job_Group
----------    --------    -----------   -------------   ------   --------------
1  Michael    Jackson     LessThan50                             Entertainer
1  Michael    Jackson                    Medium                  Entertainer
2  John       Lennon                     Small                   Swimmer
3  Clara      Clinton                    Huge           Runner
3  Clara      Clinton                    Huge                    Sportsmen

Я просто хочу получить верхнюю строку из каждого идентификатора, но не основываясь ни на чем, за исключением того, что это происходит над остальными (это уже отсортировано). Любая помощь оценена, мое здравомыслие поставлено на карту.

6 ответов

Предполагая, что ваш стол отсортирован по Capital в порядке убывания для каждого id и это id определяет группу, следующее может делать то, что вы хотите:

select t.*
from mytable as t
where not exists (select 1
                  from mytable as t2
                  where t2.id = t.id and t2.capital > t.capital
                 );
SELECT t.*
FROM   mytable AS t
WHERE  t.capital = (SELECT MAX(capital)
                    FROM   mytable t2
                    WHERE  t2.id = t.id)

Кстати, что вы хотите делать, когда есть два человека с одинаковыми идентификатором и капиталом?

SELECT  *
FROM yourTable
GROUP BY id
HAVING MAX(Capital)
with cte
(
select *, row_Number() over(Partition by ID order by Name ) as RowNumber
)

select * from cte
where RowNumber=1

попробуйте это, дайте мне знать ваши комментарии по этому вопросу.

Выберите *,row_number() over(упорядочить по идентификатору) как RNO в #temp1

выберите * из #temp как t, где RNO не входит (выберите max(RNO) из #temp как tt group по ID)

я думаю это поможет тебе

select distinct ID ,Name ,Surname,Capital from mytable order by ID 
Другие вопросы по тегам