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

Откуда:
Сообщений: 148
привет, есть таблица с 3 полями:
ID,Value,Date

select *
from table
order by ID,date

хочется выбрать только по пять записей для каждого ID, подсобите, как это сделать быстро (моя глубина знания позволяет это сделать только циклами)
20 сен 12, 11:17    [13194466]     Ответить | Цитировать Сообщить модератору
 Re: выбрать топ-5 по каждому id  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2995
для версии 2005 и выше
используйте
TOP 5 WITH TIES ... ORDER BY  ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ...)
20 сен 12, 11:28    [13194575]     Ответить | Цитировать Сообщить модератору
 Re: выбрать топ-5 по каждому id  [new]
Читатель неместный
Guest
select * from
(select r=row_number() over (partition by id order by [date] desc),* from table) t
where t.r<= 5
order by ID,date
а такой вариант
автор
TOP 5 WITH TIES ... ORDER BY ROW_NUMBER() OVER

я не могу переварить теоретически
20 сен 12, 11:31    [13194605]     Ответить | Цитировать Сообщить модератору
 Re: выбрать топ-5 по каждому id  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
HandKot
для версии 2005 и выше
используйте
TOP 5 WITH TIES ... ORDER BY  ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ...)
Это даст неправильный результат
Вот так:
WITH CTE AS(SELECT N=ROW_NUMBER()OVER(PARTITION BY ID ORDER BY [date]) FROM [table])
SELECT * FROM CTE WHERE N<=5;
или так:
SELECT TOP(1) WITH TIES * FROM [table] ORDER BY ROW_NUMBER()OVER(PARTITION BY ID ORDER BY [date])/6;
20 сен 12, 11:37    [13194657]     Ответить | Цитировать Сообщить модератору
 Re: выбрать топ-5 по каждому id  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Читатель неместный
select * from
(select r=row_number() over (partition by id order by [date] desc),* from table) t
where t.r<= 5
order by ID,date
а такой вариант
автор
TOP 5 WITH TIES ... ORDER BY ROW_NUMBER() OVER

я не могу переварить теоретически
Элементарно.
Предположим, есть 5 ID (или больше). В результате сортировки первые пять строк будут иметь номер 1 и попадут в выборку.
К ним добавятся строки с другими ID под первым номером. И всё!
А где же "по пять строк для каждого ID"?
20 сен 12, 11:44    [13194716]     Ответить | Цитировать Сообщить модератору
 Re: выбрать топ-5 по каждому id  [new]
Читатель неместный
Guest
iap
А где же "по пять строк для каждого ID"?
если это ко мне, то у меня запрос выдает по 5 строк...вроде.
20 сен 12, 13:08    [13195435]     Ответить | Цитировать Сообщить модератору
 Re: выбрать топ-5 по каждому id  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Читатель неместный
iap
А где же "по пять строк для каждого ID"?
если это ко мне, то у меня запрос выдает по 5 строк...вроде.
Нет, это по поводу "я не могу переварить теоретически" :)
20 сен 12, 13:23    [13195572]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить