Вопрос № 109065: Здравствуйте ! Допустим у меня есть таблица с 1000 записями. Мне нужно выбрать 100 из них, причем сделать сортировку по возрастанию по какому нибудь столбцу. И я точно знаю что в этой сотне записей будет запись с именем "123123.gif"-названи...
Вопрос № 109.065
Здравствуйте ! Допустим у меня есть таблица с 1000 записями. Мне нужно выбрать 100 из них, причем сделать сортировку по возрастанию по какому нибудь столбцу. И я точно знаю что в этой сотне записей будет запись с именем "123123.gif"-название столбца filename. Так вот , как можно узнать номер этой записи ? Не номер из самой таблицы из 1000 строк, а номер из выбранной сотни. Порядковый номер. Если это вообще возможно.
Отправлен: 12.11.2007, 15:04
Вопрос задал: Whiteman (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 7)
Отвечает: Errandir
Здравствуйте, Whiteman!
SELECT COUNT (*) FROM -- считаем кол-во элементов
(SELECT * FROM tab -- из подтаблицы таблицы tab...
“усл”) AS subtab -- “усл” — условие выборки, например WHERE sex == male
WHERE col <= “tgt”; -- ...которые располагались бы раньше нужного (“tgt”) нам элемента в колонке col включая его самого если бы мы сортировали по ней, что соответствует его номеру.
Надеюсь понятно...
--------- Si vox est - canta!
Ответ отправил: Errandir (статус: 7-ой класс)
Ответ отправлен: 12.11.2007, 20:54 Оценка за ответ: 5
Отвечает: Тесленко Евгений Алексеевич
Здравствуйте, 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
Евгений.
Ответ отправил: Тесленко Евгений Алексеевич (статус: Студент)
Ответ отправлен: 12.11.2007, 23:19 Оценка за ответ: 5
Отвечает: Титов Михаил Анатольевич
Здравствуйте, 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' будет последней в выборке, а количество строк будет являтся ее порядковым номером.
Ответ отправил: Титов Михаил Анатольевич (статус: 3-ий класс)
Ответ отправлен: 13.11.2007, 03:22 Оценка за ответ: 4 Комментарий оценки: извините но вы наверное не так меня поняли. этот запрос находит в исходной таблице запись с именем '123123.gif', допустим она номер 10 в таблице. Этот запрос вернет 10 в любом случает, отсортировать по возрастанию или убыванию.
Отвечает: Nomadfromx2007
Здравствуйте, Whiteman!
Вот запрос, который это реализует на Оракле:
1 подзапрос - выборку делает с сортировкой по столбцу
2 подзапрос - пронумеровывает записи + выбирает только первые 100 записей
3 подзапрос - ищет конкретно по имени файла
Приложение:
Ответ отправил: Nomadfromx2007 (статус: 1-ый класс)
Ответ отправлен: 13.11.2007, 05:04 Оценка за ответ: 5