-
Господа мастера. Есть такая задача: Имеется некоторая произвольная таблица с набором полей: RECID, CODE, NAME, F1, F2...... Типы полей CODE, NAME, F1, F2...... могут быть произвольными, но скажем для упрощения задачи, что они имеют тип varchar. Ключевое уникальное поле - RECID. Остальные поля (CODE, NAME, F1, F2......) могут иметь Null значения. Таблица заполнена некоторыми данными. Проблема задачи: Имея на входе некоторое значение RECID (гарантировано присутствующее в таблице), поле сортировки (скажем - CODE) (учитываем, что это поле может иметь NULL значения) и направление сортировки (asc или desc) необходимо построить выборку 50 записей из этой таблицы таким образом, чтобы запись, у которой RECID = входному значению RECID, была в середине этой выборки, а остальные записи в выборке соответствовали условию сортировки. Как построить такую выборку, причем так, чтоб она работала максимально быстро. База данных - MSSQL 2000, поэтому решения с использованием возможностей более поздних версий (типа MSSQL 2005) просьба не предлагать. Заранее спасибо.
-
Э-э-э... Предлагается нам решить задачку? А зачем?
-
> [0] harisma (17.03.08 13:25)
select * from
(select top 25 * from table where recid<:recid
union all
select top 25 * from table where recid>=:recid) order by code
Не то?
-
> Sergey13 © (17.03.08 13:34) [2]
А ежели, например, первый селект вернёт 0 записей, это правильное решение?
-
> А ежели, например, первый селект вернёт 0 записей, это правильное > решение?
Я думаю что в таком случае надо брать все 50 записей из того селекта, где есть записи
-
> Я думаю что в таком случае надо брать все 50 записей из > того селекта, где есть записи
Т.е. ты даже не можешь четко сформулировать постановку задачи?
-
Ну как не могу? Я сформулировал. Правда как частный вариант, считая что и сверху и снизу есть достаточное колличество записей для выборки. А в общем случае, мне надо вернуть 50 записей из этой таблицы, причем чтобы запись с исходным RECID обязательно была в этой выборке (в идеале посередине) и последовательность записей в выборке соответствовала заданному режиму сортировки (поле, направление).
Остальные подробности по условию задачи см в сообщении [0]
-
> [3] Johnmen © (17.03.08 13:36)
Ну если основным заданим является вывод 50 записей с нужной посередине, то естественно для полусотни записей задача неразрешима.
> [4] harisma (17.03.08 13:46)
Какой смысл во всем этом?
-
> Господа мастера. Есть такая задача:
выглядит как тест на вшивость
-
> А в общем случае, мне надо вернуть 50 записей из этой таблицы,
Как выглядит "в общем случае", если в этой таблице 11 записей?
> Правда как частный вариант, считая что и сверху и снизу > есть достаточное колличество записей для выборки.
Так мы решаем частный случай?
-
> выглядит как тест на вшивость
А если не будет решения, скажет "Ну какие вы нахрен мастера?" :)
|