Выберите Макс из каждого подмножества - PullRequest
5 голосов
/ 15 ноября 2011

Я бьюсь головой здесь. Я чувствую себя довольно глупо, потому что я уверен, что я сделал что-то подобное раньше, но не могу на всю жизнь вспомнить, как. Наверное, в один из дней>. <</p>

Скажем, у меня есть следующие данные: ---> и запрос, который возвращает это: ---> Но я хочу это:

ID   FirstID              ID   FirstID                ID   FirstID
--   -------              --   -------                --   -------
1     1                   1    1                      7    1
2     1                   3    3                      3    3
3     3                   4    4                      6    4
4     4                   5    5                      5    5
5     5
6     4
7     1

Обратите внимание, что мой запрос возвращает записи, где ID = FirstID, но я хочу, чтобы он возвращал Max (ID) для каждого подмножества уникального FirstID. Звучит достаточно просто, верно? Это то, что я думал, но я продолжаю возвращаться, только запись # 7. Вот мой запрос (тот, который возвращает второй блок рисунков выше) с некоторым тестовым кодом, чтобы сделать вашу жизнь проще. Мне нужно это, чтобы дать мне результаты в крайнем правом блоке. Следует отметить, что это самосоединяющаяся таблица, где FirstID является внешним ключом для ID. Спасибо:)

declare @MyTable table (ID int, FirstID int)
insert into @MyTable values (1,1),(2,1),(3,3),(4,4),(5,5),(6,4),(7,1)
select ID, FirstID
from @MyTable
where ID = FirstID

Ответы [ 2 ]

4 голосов
/ 15 ноября 2011

Работает ли это

declare @MyTable table (ID int, FirstID int)
insert into @MyTable values (1,1),(2,1),(3,3),(4,4),(5,5),(6,4),(7,1)

Select FirstID, Max (Id) ID
From @MyTable
Group BY FirstID

Результаты в

FirstID     ID
----------- -----------
1           7
3           3
4           6
5           5
1 голос
/ 15 ноября 2011

В SQL2005 и более поздних версиях SQL2008 агрегатные функции в SQL Server были улучшены

Вы можете использовать предложение PARTITION BY, например, с функциями MAX, MIN, SUM, COUNT

Пожалуйста, попробуйте следующий пример

select 
Distinct FirstID, Max(ID) OVER (PARTITION BY FirstID) MaxID
from @MyTable 

Вы можете найти пример на http://www.kodyaz.com/t-sql/sql-count-function-with-partition-by-clause.aspx

После вашего комментария я изменил тот же запрос, чтобы обеспечить точный вывод в порядке строк и столбцов следующим образом

select Distinct 
    Max(ID) OVER (PARTITION BY FirstID) ID,
    FirstID
from @MyTable 
order by FirstID
...