Создание эффективной справки по Oracle / PL_SQL Query - PullRequest
1 голос
/ 16 сентября 2011

Надеюсь, у вас отличный день. Я столкнулся с проблемой.

В базе данных использование отличных неэффективно, и это создает многочисленные проблемы тайм-аута.

Так что в простом случае у меня есть ...

select distinct first_value(e.error_message) over (order by create_date desc)
                  from database e

Какой именно один результат, какое сообщение об ошибке упорядочено последним, и это первое значение в своем роде, теперь, когда я запускаю его, это занимает около 0,8 секунд, что неплохо, но проблема в том, что присоединение и создание этого будет больше запросов и больше, чем просто поиск ошибок.

Так что, если я сделаю следующий запрос ...

select  first_value(e.error_message) over (order by create_date desc)
                  from database e

Этот запрос занимает около 0,4 секунды, но проблема заключается в том, что требуется только первый элемент, который дается. Как мне это сделать, я не знаю номер строки, который конкретно с ним.

Спасибо всем.

* РЕДАКТИРОВАТЬ

Просто чтобы все знали, использование решения Роба сделало мой огромный запрос более эффективным. ПОПРОБУЙТЕ НЕ ИСПОЛЬЗОВАТЬ ОТЛИЧИЕ, КОГДА ВОЗМОЖНО !!!!

Ответы [ 2 ]

5 голосов
/ 16 сентября 2011
select max(e.error_message) keep (dense_rank last order by create_date)
  from database e

РЕДАКТИРОВАТЬ: Вот ссылка на документацию функции LAST

Выбирает последнее сообщение об ошибке при сортировке по create_date.

2 голосов
/ 16 сентября 2011

Вы можете обернуть выбор:

SELECT *
  FROM (
        select first_value(e.error_message) over (order by create_date desc)               from database e 
       )
 WHERE rownum < 2;

OR

SELECT UNIQUE 
       val
  FROM (
        select first_value(e.error_message) over (order by create_date desc) as val
          from database e 
       );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...