Дурацкий вопрос про MS SQL Server

Все, что вы хотели знать о программизме, но боялись спросить.
Ответить
Vovchik
Маньяк
Сообщения: 2841
Зарегистрирован: 20 фев 2003, 09:15
Откуда: Vancouver

Дурацкий вопрос про MS SQL Server

Сообщение Vovchik »

Вопрос противоречащий всем основам реляциоонной теории.
Скажем есть таблица. В ней скажем есть миллион записей. Из этой таблицы с помощью запроса выбирается 10 тыс каких то там записей. Так вот есть ли какой нить способ элегантно вытащить одну (одну!) запись из этих 10 тыс которая скажем находится на месте номер 1245 в этом результируещем запросе? Скажем слово TOP позволяем получить первую или 50 первых. А вот одну в определенном порядке?

Можно конечно выдрать все 10 тыс записей в клиентское приложение, там они засунуться в объект, в объекте все строки пронумерованы и все элементарно. ТОка вот ежели записей скажем будет 200 тыс то клиент могет крякнуться...

В общем теоретическая постановка задачи такова - заставить сервер теоретически рассчиать результирубщий набор (как в курсоре), пронумеровать строки, найти идентификатор стороки в таблице по заданному номеру строки в курсоре (наборе) пихнуть одну такую. строку куда надо.
Donskoy Melnik
Пользователь
Сообщения: 96
Зарегистрирован: 19 фев 2005, 10:10
Откуда: GTA - Brampton

Сообщение Donskoy Melnik »

Yes, nested selects, reverse sort order...

select top 1 * from (select top 1435 * from policy order by policy_id) as p order by p.policy_id desc

Gives you the 1435th record in policy table. Is that what you need?
Vovchik
Маньяк
Сообщения: 2841
Зарегистрирован: 20 фев 2003, 09:15
Откуда: Vancouver

Сообщение Vovchik »

Donskoy Melnik писал(а):Yes, nested selects, reverse sort order...

select top 1 * from (select top 1435 * from policy order by policy_id) as p order by p.policy_id desc

Gives you the 1435th record in policy table. Is that what you need?
Yep! Thanks a lot!
Yuri Dimant
Пользователь
Сообщения: 107
Зарегистрирован: 02 авг 2004, 22:00

MSSQL

Сообщение Yuri Dimant »

Vovchikубедись что твои индех в порядке.
Другои пример на NorthWind database

SELECT <column lists> FROM Orders WHERE 8=(SELECT COUNT(*) FROM Orders o
WHERE O.orderId<=Orders.Orderid)
ORDER BY Orderid DESC
Donskoy Melnik
Пользователь
Сообщения: 96
Зарегистрирован: 19 фев 2005, 10:10
Откуда: GTA - Brampton

Re: MSSQL

Сообщение Donskoy Melnik »

That's a different task.
Ответить