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

Есть табличка create table t (id int identity(1,1), b varchar(40))

Выбрать n первых записей можно с помощью select top n, а как быть, если нужно допустим n записей, начиная с 201-й?

На поле id ориинтироваться нельзя, потому что строки бывают и удаляются, т.е. идет например

id b
2 'запись 1'
5 'запись 2'
6 'запись 3'
10 'запись 4'
20 фев 12, 11:10    [12120660]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать n записей из любого места таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31957
qwer654
Выбрать n первых записей можно с помощью select top n, а как быть, если нужно допустим n записей, начиная с 201-й?
Зависит от версии сиквела. Например, можно использовать row_number()
20 фев 12, 11:12    [12120677]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать n записей из любого места таблицы  [new]
qwer654
Guest
Как сделать в принципе я знаю, например

select top 200 id into #tt from t
order by id desc

select top n + 200 * from t
where
id not in (select id from #tt)

drop table #tt

Но гложет мысль что это слегка не оптимально
20 фев 12, 11:14    [12120683]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать n записей из любого места таблицы  [new]
qwer654
Guest
SQL 2008 кажется

А как с row_number?
20 фев 12, 11:15    [12120688]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать n записей из любого места таблицы  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
qwer654, как-то так
with zz
as
(
select *,row_number() over(order by t.id) as rn
from t
)
select *
from zz
where rn between 201 and 220
20 фев 12, 11:19    [12120715]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить