Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.09.14;
Скачать: CL | DM;

Вниз

Выборка из таблицы   Найти похожие ветки 

 
harisma   (2008-03-17 13:25) [0]

Господа мастера. Есть такая задача:
Имеется некоторая произвольная таблица с набором полей: 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) просьба не предлагать.
Заранее спасибо.


 
Johnmen ©   (2008-03-17 13:28) [1]

Э-э-э...
Предлагается нам решить задачку?
А зачем?


 
Sergey13 ©   (2008-03-17 13:34) [2]

> [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

Не то?


 
Johnmen ©   (2008-03-17 13:36) [3]


> Sergey13 ©   (17.03.08 13:34) [2]

А ежели, например, первый селект вернёт 0 записей, это правильное решение?


 
harisma   (2008-03-17 13:46) [4]


> А ежели, например, первый селект вернёт 0 записей, это правильное
> решение?

Я думаю что в таком случае надо брать все 50 записей из того селекта, где есть записи


 
Johnmen ©   (2008-03-17 13:48) [5]


> Я думаю что в таком случае надо брать все 50 записей из
> того селекта, где есть записи

Т.е. ты даже не можешь четко сформулировать постановку задачи?


 
harisma   (2008-03-17 13:57) [6]

Ну как не могу? Я сформулировал. Правда как частный вариант, считая что и сверху и снизу есть достаточное колличество записей для выборки. А в общем случае, мне надо вернуть 50 записей из этой таблицы, причем чтобы запись с исходным RECID обязательно была в этой выборке (в идеале посередине) и последовательность записей в выборке соответствовала заданному режиму сортировки (поле, направление).

Остальные подробности по условию задачи см в сообщении [0]


 
Sergey13 ©   (2008-03-17 14:00) [7]

> [3] Johnmen ©   (17.03.08 13:36)

Ну если основным заданим является вывод 50 записей с нужной посередине, то естественно для полусотни записей задача неразрешима.

> [4] harisma   (17.03.08 13:46)

Какой смысл во всем этом?


 
www   (2008-03-17 14:01) [8]


> Господа мастера. Есть такая задача:

выглядит как тест на вшивость


 
Johnmen ©   (2008-03-17 14:02) [9]


> А в общем случае, мне надо вернуть 50 записей из этой таблицы,

Как выглядит "в общем случае", если в этой таблице 11 записей?

>  Правда как частный вариант, считая что и сверху и снизу
> есть достаточное колличество записей для выборки.

Так мы решаем частный случай?


 
Johnmen ©   (2008-03-17 14:05) [10]


> выглядит как тест на вшивость

А если не будет решения, скажет "Ну какие вы нахрен мастера?"
:)



Страницы: 1 вся ветка

Текущий архив: 2008.09.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.022 c
2-1217997524
Viod
2008-08-06 08:38
2008.09.14
Обратиться к объекту по имени хранящемся в строке


15-1216989150
pasha_golub
2008-07-25 16:32
2008.09.14
Саппортовые заготовки


4-1196163825
delpher_g
2007-11-27 14:43
2008.09.14
Как программно замедлить скорость вращения CD-ROMа


3-1205828294
Гость-1734
2008-03-18 11:18
2008.09.14
постоянная ошибка с msdart.dll


11-1193034025
Дмитрий Пырин
2007-10-22 10:20
2008.09.14
проблема с Bitmap.LoadFromFile