创建高效的Oracle / PL SQL查询帮助

时间:2011-09-16 13:32:41

标签: database oracle

希望你过得愉快。 我遇到了一个问题。

在数据库中,使用distinct是无效的,并且会造成许多超时问题。

所以在一个简单的例子中我有......

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

哪一个错误消息按最新排序的结果,它是同类中的第一个值,现在当我运行它需要大约.8秒这也不错,但问题是,加入和制作这个查询更大,做的不仅仅是检索错误将是一个问题。

因此,如果我执行以下查询...

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

此查询大约需要0.4秒,但问题只是想要给出的第一个项目。我该怎么做,我不知道具体的行号。

谢谢大家。

* 编辑

只是为了让每个人都知道,使用Rob的解决方案使我的查询更有效率尝试不要在可能时使用DISTINCT !!!!

2 个答案:

答案 0 :(得分:5)

select max(e.error_message) keep (dense_rank last order by create_date)
  from database e

编辑:以下是LAST function

文档的链接

按create_date排序时选择最后一条错误消息。

答案 1 :(得分:2)

你可以包装选择:

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 
       );