2011-07-04 5 views
2

私の現在のクエリとにSELECT:DESCとROWNUM

SELECT DACTIONMILLIS, DACTIONDATE INTO WF_DACTIONMILLIS, WF_DACTIONDATE 
FROM WORKFLOWHISTORY 
WHERE ddocname=? and LOWER(DACTION)=? 
and lower(DWFSTEPNAME)=? 
and lower(DUSER)=? 
and rownum = 1 
ORDER BY DACTIONDATE desc; 

しかし、ROWNUMが、私は不正な結果を得ていることにより、オーダーの前に適用されるため。私はstackoverflowの上、以下のトピックを見つけました:How do I limit the number of rows returned by an Oracle query after ordering?それは選択を説明し、ない選択

答えて

5
SELECT DACTIONMILLIS, DACTIONDATE INTO WF_DACTIONMILLIS, WF_DACTIONDATE 
FROM (
    SELECT DACTIONMILLIS, DACTIONDATE, WF_DACTIONDATE 
    FROM WORKFLOWHISTORY 
    WHERE ddocname=? and LOWER(DACTION)=? 
    and lower(DWFSTEPNAME)=? 
    and lower(DUSER)=? 
    ORDER BY DACTIONDATE desc 
) 
WHERE rownum = 1 
3

に同じアプローチは、あなたが参照の問題のように適用されます。

SELECT DACTIONMILLIS, DACTIONDATE 
INTO WF_DACTIONMILLIS, WF_DACTIONDATE 
from 
(SELECT DACTIONMILLIS, DACTIONDATE 
    FROM WORKFLOWHISTORY 
    WHERE ddocname=? and LOWER(DACTION)=? 
    and lower(DWFSTEPNAME)=? 
    and lower(DUSER)=? 
    ORDER BY DACTIONDATE desc 
) 
WHERE rownum = 1