Конференция "Базы" » Выборка из таблицы [D5, MSSQL]
 
  • harisma (17.03.08 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 © (17.03.08 13:28) [1]
    Э-э-э...
    Предлагается нам решить задачку?
    А зачем?
  • Sergey13 © (17.03.08 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 © (17.03.08 13:36) [3]

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

    А ежели, например, первый селект вернёт 0 записей, это правильное решение?
  • harisma (17.03.08 13:46) [4]

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

    Я думаю что в таком случае надо брать все 50 записей из того селекта, где есть записи
  • Johnmen © (17.03.08 13:48) [5]

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

    Т.е. ты даже не можешь четко сформулировать постановку задачи?
  • harisma (17.03.08 13:57) [6]
    Ну как не могу? Я сформулировал. Правда как частный вариант, считая что и сверху и снизу есть достаточное колличество записей для выборки. А в общем случае, мне надо вернуть 50 записей из этой таблицы, причем чтобы запись с исходным RECID обязательно была в этой выборке (в идеале посередине) и последовательность записей в выборке соответствовала заданному режиму сортировки (поле, направление).

    Остальные подробности по условию задачи см в сообщении [0]
  • Sergey13 © (17.03.08 14:00) [7]
    > [3] Johnmen ©   (17.03.08 13:36)

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

    > [4] harisma   (17.03.08 13:46)

    Какой смысл во всем этом?
  • www (17.03.08 14:01) [8]

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

    выглядит как тест на вшивость
  • Johnmen © (17.03.08 14:02) [9]

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

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

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

    Так мы решаем частный случай?
  • Johnmen © (17.03.08 14:05) [10]

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

    А если не будет решения, скажет "Ну какие вы нахрен мастера?"
    :)
 
Конференция "Базы" » Выборка из таблицы [D5, MSSQL]
Есть новые Нет новых   [134433   +21][b:0][p:0]