2015-07-15 2 views
0

Ниже приведен запрос sql (оракул), который я использую для получения последней записи возвращаемого результата запроса выбора. Это оптимальный способ?Получить последнюю запись набора результатов

SELECT HAZMAT_PLACARD_NOTATION 
     INTO v_pcn 
     FROM HAZMAT_CLASS_IRF 
     WHERE HAZMAT_CD = p_stcc_cd and ROWID = (SELECT MAX(ROWID) FROM HAZMAT_CLASS_IRF WHERE HAZMAT_CD = p_stcc_cd); 

Ниже приведен пример результирующего набора из запроса на выборку, где HAZMAT_CD = 4920111 Но последняя строка со значением HAZMAT_PLAYCARD_NOTATION Самовоспламеняющиеся должно быть извлечено. Это объективном

enter image description here

+0

Я думаю, вы можете использовать 'SELECT TOP 1' и' ORDER BY ROWID DESC' - но я не уверен в Oracle;). –

+1

Я не думаю, что вы можете использовать 'ORDER BY' здесь. Этот запрос кажется мне удобным. –

+0

Да, TOP 1 не работает в оракуле –

ответ

0

В MySQL, вы можете попробовать это.

SELECT * 
FROM `table` 
ORDER BY id DESC 
LIMIT 0 , 1 
+0

OP хочет сделать «INSERT INTO», что делает вопрос немного сложнее, чем запрос, который вы опубликовали. –

+0

Вопрос: «Получить последнюю запись набора результатов» –

+0

Это не mysql, а часть хранимой процедуры.Я сохраняю возвращаемое значение переменной v_pcn –

-1
select * from 
    ( 
    select * from table order by id desc 
    ) 
where rownum = 1 
+0

Я не это, это работает. Не возвращает ли это первую строку результирующего набора? –

+1

он делает, но его также почему им сортировать по любому ID, который вам нужно отсортировать по desc – lookslikeanevo

+0

Разве это не заказ, выполненный после rownum? http://stackoverflow.com/questions/15091849/how-to-use-oracle-order-by-and-rownum-correctly –

1

Получить последняя запись результирующего набора

Есть много способов:

OraclePre-12c версия:

  • ROWNUM в суб-запроса и ORDER BY в внешнем запросе
  • Аналитическая функция

Oracle12c версия:

  • Топ-н Роу Ограничение функции

Использование ROWNUM

SELECT HAZMAT_PLACARD_NOTATION 
INTO v_pcn 
FROM 
    (SELECT HAZMAT_PLACARD_NOTATION, 
    ROWNUM rn 
    FROM HAZMAT_CLASS_IRF 
    WHERE HAZMAT_CD = p_stcc_cd 
    ORDER BY  <sort_column> DESC 
) 
WHERE rn =1; 

Использование Топ-н Роу Предельное функция

SELECT HAZMAT_PLACARD_NOTATION 
INTO v_pcn 
    FROM HAZMAT_CLASS_IRF 
    WHERE HAZMAT_CD = p_stcc_cd 
    ORDER BY  <sort_column> DESC 
FETCH FIRST 1 ROW ONLY; 

Посмотрите на это answer примеры и подробные объяснения.

+0

Это хорошее объяснение. Но в чем преимущество использования запроса с ROWNUM, которое вы предоставили по запросу в моем вопросе. Это оптимальный способ? –

+0

@AsiriLiyanaArachchi Используя ** ROWNUM **, вы просматриваете таблицу только один раз и применяете ROWNUM в результирующем наборе подзапроса. В вашем запросе вы дважды сканируете таблицу, что не является оптимальным. –

+0

@AsiriLiyanaArachchi Пожалуйста, отметьте это как ответ, помогли бы другим. –

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