Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.049 c
15-1216271482
Dennis I. Komarov
2008-07-17 09:11
2008.09.14
MS WinXP SP3


2-1217687765
BlueDragon
2008-08-02 18:36
2008.09.14
Поиск скрытых файлов


15-1216723457
voe
2008-07-22 14:44
2008.09.14
Какой лучше использовать компанент для FTP клиента?


15-1216655854
ПостОвый терминатор
2008-07-21 19:57
2008.09.14
О полномочиях


6-1193157498
Pacific
2007-10-23 20:38
2008.09.14
smtp





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский