Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 TOP для группы ?  [new]
Гооооооссттььб
Guest
Как выполнить TOP для группы ?

1 5
1 4
1 3
1 2
2 10
2 6
2 6
2 4

1 5
2 10

И где можно развернуто почитать про оконные функции 2012 ?
13 ноя 13, 23:28    [15124937]     Ответить | Цитировать Сообщить модератору
 Re: TOP для группы ?  [new]
Гооооооссттььб
Guest
Ничего умнее кроме как пронумеровать группы и взять n значений на ум не приходит.
13 ноя 13, 23:33    [15124947]     Ответить | Цитировать Сообщить модератору
 Re: TOP для группы ?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35396
Блог
мда

select id, max(a)...
13 ноя 13, 23:35    [15124956]     Ответить | Цитировать Сообщить модератору
 Re: TOP для группы ?  [new]
Гооооооссттььб
Guest
Столбиков как бы много .... ц них может быть произвольная сортировка. поэтому я и хочу TOP для группы.
13 ноя 13, 23:40    [15124971]     Ответить | Цитировать Сообщить модератору
 Re: TOP для группы ?  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Гооооооссттььб
И где можно развернуто почитать про оконные функции 2012 ?
Microsoft SQL Server 2012. Высокопроизводительный код T-SQL. Оконные функции
Гооооооссттььб
Ничего умнее кроме как пронумеровать группы и взять n значений на ум не приходит.
И что не нравится в этом способе?
13 ноя 13, 23:55    [15125024]     Ответить | Цитировать Сообщить модератору
 Re: TOP для группы ?  [new]
Гооооооссттььб
Guest
Та все устраивает, мало ли может в 2012 есть такая штуку.
Так и сделал :)
14 ноя 13, 00:09    [15125074]     Ответить | Цитировать Сообщить модератору
 Re: TOP для группы ?  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
Гооооооссттььб,

для 2008го...

declare @t table (a int, b int)
insert @t values (1, 5),(1, 4),(1, 3),(1, 2),(2, 1),(2, 6),(2, 6), (2, 4)

-- вариант 1
select distinct t.a, o.b
from @t t
outer apply
(
	select top(1) b
	from @t where a=t.a
	order by b
) o

-- вариант 2
select a,b
from
(
	select *, row_number() over (partition by a order by b) rn
	from @t
) t
where rn=1


Единственное, Вам что бы вытаскивать из группы 1 или несколько записей нужно понимать в каком порядке, т.е. задавать порядок сортировки. в группе 1 минимальная 2, максимальная 5... можно без сортировки указать в 1м варианте (впрочем и во 2м задать поле сортировки тоже что и группировка), но... получится строка непонятно какая, и есть шанс что в первый раз будет одно значение, в другой раз другое.
14 ноя 13, 08:46    [15125656]     Ответить | Цитировать Сообщить модератору
 Re: TOP для группы ?  [new]
Гооооооссттььб
Guest
оооо :) вот и APPLY пригодился.
14 ноя 13, 11:21    [15126472]     Ответить | Цитировать Сообщить модератору
 Re: TOP для группы ?  [new]
step_ks
Member

Откуда:
Сообщений: 936
Выбрать TOP 1 в каждой группе
14 ноя 13, 12:17    [15126986]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить