Вопрос № 39649: Вот есть например база, где имеется поле время (timest_). Как выбрать, например, ровно 100 записей в порядке убывания, где их поле timest_ меньше заданного значения? (В идеале, чтоб не пропустить ни одной записи между записями с минимальным значением...
Вопрос № 39.649
Вот есть например база, где имеется поле время (timest_). Как выбрать, например, ровно 100 записей в порядке убывания, где их поле timest_ меньше заданного значения? (В идеале, чтоб не пропустить ни одной записи между записями с минимальным значением времени (100-я запись на выходе) и максимальным, которое задано).
P. S. БД - MS Access.
P. P. S. Индексы не предлагать, т. к. возможны вставки в середину таблицы, и ответы будут неверными, если брать записи типа:
where *
from baza
where (id >=100) and (id <=200)
т. к. id вставленной в середину записи может уже быть 1000.
Спасибо.
Отправлен: 07.04.2006, 15:25
Вопрос задал: mvp (статус: 10-ый класс)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Doctor013
Здравствуйте, mvp!
Для Oracle я бы делал это так:
выборка промежуточных записей из результирующего множества-
select *
from (select a.*, rownum rnum
from (select * from my_table t where t.date_
where rownum <=100 )
where rnum >= 1
Во внутреннем запросе наладываем условие и сортируем по убыванию, следующим позапросом ограничиваем снизу (100 записей), самый верхний в Вашем случае не нужен, я его оставил для примера, если вдруг потребуется вывести записи с 5 до 100 и т.д. В приложении то, что получилось.
Приложение:
--------- Большинство ответов на вопросы в рассылках находиться через Яндекс за 1 мин.
Ответ отправил: Doctor013 (статус: Студент)
Ответ отправлен: 07.04.2006, 15:49
Отвечает: Kazakh
Здравствуйте, mvp!
В Аксесе замечательный диалект SQL.
Вот решение для вашей проблемы. Этот запрос выведет 100 записей удовлетворяющих условиям. ):
SELECT TOP 100 *
FROM "Ваша таблица"
WHERE timest_>"Ваше значение"
Вместо TOP 100 можно использовать %
То есть, TOP 10% выведет только 10 % всех записей.
--------- Если собеседник затрудняется ответить, значит, вопрос поставлен правильно.
Ответ отправил: Kazakh (статус: 5-ый класс)
Ответ отправлен: 07.04.2006, 15:55
Отвечает: Игорь Елизаров
Здравствуйте, mvp!
выбираем из таблицы table_1 100 записей у которых значение поля timest меньше заданного и сортируем выборку по этому полю
на SQL этот запрос выглядит так:
select top 100 * from table_1 where timest <@datatime
order by timest
В MS Access аналогично. то есть тут Top 100 задает количество возвращаемых записей.
С уважением, Игорь
Ответ отправил: Игорь Елизаров (статус: 3-ий класс)
Ответ отправлен: 07.04.2006, 18:11
Отвечает: Архангельский Андрей Германович
Здравствуйте, mvp!
В MS Access - никак
В Firebird достаточно написать
Select first 100 * from Table order by Timest desc