Главная страница
    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.071 c
2-1217779974
minim
2008-08-03 20:12
2008.09.14
Ширина Label


15-1216787659
Тоша
2008-07-23 08:34
2008.09.14
Социологический опрос


3-1205492132
LoDr
2008-03-14 13:55
2008.09.14
Firebird, узнать имя сервера


15-1216793329
Jeer
2008-07-23 10:08
2008.09.14
Linux Festival


11-1192217573
Vladimir Kladov
2007-10-12 23:32
2008.09.14
Версия 2.83





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский