ВЫБЕРИТЕ ТОП из каждой группы
Извините, ребята, я схожу с ума от этого...
Мой стол:
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)
Кстати, что вы хотите делать, когда есть два человека с одинаковыми идентификатором и капиталом?
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