2016-05-11 4 views
-2

В настоящее время я работаю над приложением, которое запрашивает базу данных - Oracle 10g. Есть ли что-то эквивалентное в Oracle, чтобы получить то же самое, что мы используем Top (x) в SQL Server? Я хочу, чтобы данные были добавлены в таблицу. Любая помощь будет оценена по достоинству.что такое верхний эквивалент select в oracle10g

Обратите внимание, что я не хочу 5 наивысших значений. Я хочу 5 верхних значений. Речь идет о порядковой позиции физического порядка, в который строки добавляются в таблицу. Никакой сортировки даже по индексу.

+0

Читать Спросите Тома о топ-н и пагинацией: http://www.oracle.com/technetwork/issue-archive/2007/07-jan/o17asktom- 093877.html и http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html –

+0

Сохраняете ли вы созданный тип даты в таблице или, может быть, последовательность? Если нет, решение не может быть возможным, поскольку Oracle не сохраняет порядок, по которому строки были добавлены в таблицу (вы не можете использовать rowid, rownum или любой порядок по умолчанию, чтобы получить порядок, в который строки были вставлены в таблицу) , –

+0

Возможный дубликат [Oracle SQL - как получить самые высокие 5 значений столбца] (http://stackoverflow.com/questions/2306744/oracle-sql-how-to-retrieve-highest-5-values-of-a -column) – MT0

ответ

3

Предполагая, что вы вставляете данные с увеличивающимся значением первичного ключа (с помощью последовательности или/значения даты отметки времени), то вы можете сделать:

SELECT * 
FROM (
    SELECT * 
    FROM table_name 
    ORDER BY primary_key_column 
) 
WHERE ROWNUM <= 10; 

Вам нужен внешний запрос в порядке, в исполнение которых происходит в запросе:

  1. в WHERE оговорка фильтры применяются (и псевдо-столбец ROWNUM генерируется для каждой строки, которая соответствует всем WHERE пунктом фильтров);
  2. Затем применяется статья ORDER BY.

Применяя это в одном запросе, вы получите первые 10 строк, найденных в базе данных, и затем упорядочите эти строки с помощью первичного ключа (а не того, что вы хотите). Используя внутренний запрос, вы можете принудительно применить предложение ORDER BY, а затем при выполнении внешнего запроса произойдет фильтрация требуемого количества строк.

Если вы не имеете увеличивающийся первичный ключ, то вам придется полагаться только ROWNUM без ORDER BY пункта - тем не менее, если таблица включено движение строки или если вы удалите строку, а затем вставить другую строку (в этом случае база данных может заполнить пустое пространство новой строкой), то вы можете найти, что строки не извлекаются в порядке вставки. Если вы можете жить с этим, то просто сделать:

SELECT * 
FROM table_name 
WHERE ROWNUM <= 10; 
+0

Ваш ответ не касается моего вопроса. Повторяю, я хочу, чтобы первые n строк были добавлены в таблицу. Пожалуйста, предоставьте мне ответ на этот вопрос. –

+0

@MukeshAdhvaryu Вы не можете получить строки в том порядке, в котором они добавлены в таблицу, если (а) вы не поддерживаете столбец с уникальным столбцом, который присваивается инкрементному значению каждой последовательной вставке (в этом случае вы можете заказать это как я) или (b), если вы никогда не удаляете, а затем вставляете строки из таблицы (или перемещаете строки) ** и **, база данных вставляет данные в файлы данных в том порядке, в котором она была создана, и читает обратно в том же порядке (ни один из них не гарантирован), тогда указание порядка не может работать (согласно моему второму запросу). – MT0

+0

+1 Хороший, полный ответ ... Я считал, что представляю очень похожий ответ, как ваш, но, поскольку не было ясно, была ли последовательность или тип данных даты в таблице, я решил просто оставить комментарий к вопрос и двигаться дальше ... –

Смежные вопросы