Консультация № 109065
12.11.2007, 15:04
0.00 руб.
0 4 4
Здравствуйте ! Допустим у меня есть таблица с 1000 записями. Мне нужно выбрать 100 из них, причем сделать сортировку по возрастанию по какому нибудь столбцу. И я точно знаю что в этой сотне записей будет запись с именем "123123.gif"-название столбца filename. Так вот , как можно узнать номер этой записи ? Не номер из самой таблицы из 1000 строк, а номер из выбранной сотни. Порядковый номер. Если это вообще возможно.

Обсуждение

Неизвестный
12.11.2007, 20:54
общий
это ответ
Здравствуйте, Whiteman!

SELECT COUNT (*) FROM -- считаем кол-во элементов
(SELECT * FROM tab -- из подтаблицы таблицы tab...
“усл”) AS subtab -- “усл” — условие выборки, например WHERE sex == male
WHERE col <= “tgt”; -- ...которые располагались бы раньше нужного (“tgt”) нам элемента в колонке col включая его самого если бы мы сортировали по ней, что соответствует его номеру.

Надеюсь понятно...
Неизвестный
12.11.2007, 23:19
общий
это ответ
Здравствуйте, Whiteman!
"Допустим" Вы используете MS SQL тогда сотня записей отображается запросом который начинается так:
SELECT TOP 100...
Определить номер записи содержащей "123123.gif" проще если нумерация строк будет отображаться. В вопросе 104.829 эта тема подымалась, подобный запрос отобразит поле с нумерацией по порядку:
select test_3.rank, test_3.id_test, test_3.string
from (select test_1.id_test, test_1.string, (select count(*) from test as test_2 where test_2.id_test <= test_1.id_test) as rank from test as test_1) as test_3
order by rank
Евгений.
Неизвестный
13.11.2007, 03:22
общий
это ответ
Здравствуйте, Whiteman!

Сортировать надо по filename?, тогда запрос

SELECT No
FROM (
SELECT Count(*) AS No, T2.filename
FROM Table AS T1 INNER JOIN Table AS T2 ON T1.filename <= T2.filename
WHERE .... -- здесь ваше условие отбора
GROUP BY T2.filename
) AS T
WHERE T.filename = ‘123123.gif‘

вернет вам номер вашей записи в выборке. Но это так, для демонстрации одного способа последовательной нумерации строк в запросе. Конкретно ваша задача может быть решена короче:

SELECT Count(*) AS No
FROM Table
WHERE <другие условия отбора> AND filename <= ‘123123.gif‘
ORDER BY filename

В данном случае запись с полем filename, равным ‘123123.gif‘ будет последней в выборке, а количество строк будет являтся ее порядковым номером.

Неизвестный
13.11.2007, 05:04
общий
это ответ
Здравствуйте, Whiteman!
Вот запрос, который это реализует на Оракле:
1 подзапрос - выборку делает с сортировкой по столбцу
2 подзапрос - пронумеровывает записи + выбирает только первые 100 записей
3 подзапрос - ищет конкретно по имени файла

Приложение:
SELECT * FROM (SELECT ROWNUM СОРТ, З.* FROM (SELECT * FROM ФЛ ORDER BY <столбец_сортировки>) З WHERE ROWNUM <= 100) WHERE filename=‘123123.gif‘
Форма ответа