我有以下查询给出了错误的结果。我想以递减的方式对PROCESS_START_DATE进行排序,以便在查询中始终获得最新的PROCESS_START_DATE。我在oracle中运行了上面的查询但它显示的输出不正确。我想按降序排列最新的PROCESS_CREATION_DATE。为此我写了有问题的查询。当我删除条件PROCESS_MONITOR.NAME ='WORKFLOWINENGINE1'时,它的运行绝对正常。但是当我使用这个条件时,我的查询无法生成正确的输出。我没有收到最新的PROCESS_CREATION_DATE
select * from(
select PROCESS_START_DATE
from PROCESS_MONITOR_STATISTIC JOIN PROCESS_MONITOR ON PROCESS_MONITOR.ID=PROCESS_MONITOR_STATISTIC.PROCESS_MONITOR_ID where PROCESS_MONITOR.NAME = 'WORKFLOWINENGINE1'
order by PROCESS_START_DATE desc)
where ROWNUM <= 1000
当我运行以下查询时,我得到了正确的结果。但只有当我使用连接条件时,我才得到预期的输出。
select * from
(select PROCESS_START_DATE
from PROCESS_MONITOR_STATISTIC
order by PROCESS_START_DATE desc)
where ROWNUM <=10
答案 0 :(得分:2)
由于ORDER BY
子句应用于子查询,而不是查询本身,因此外部查询的顺序将丢失。你需要两个ORDER BY
条款
ORDER BY
ROWNUM
ORDER BY
以确保查询结果的顺序正确。以下是应该有效的查询:
select * from(
select PROCESS_START_DATE
from PROCESS_MONITOR_STATISTIC
JOIN PROCESS_MONITOR ON PROCESS_MONITOR.ID=PROCESS_MONITOR_STATISTIC.PROCESS_MONITOR_ID
where PROCESS_MONITOR.NAME = 'WORKFLOWINENGINE1'
order by PROCESS_START_DATE desc
) inner
where ROWNUM <= 1000
order by inner.PROCESS_START_DATE desc
答案 1 :(得分:0)
请参阅此处了解为top-n获取正确结果集的方法。另请注意“不该做什么”部分,这正是您所做的。
http://oracle-base.com/articles/misc/top-n-queries.php#mistake