2015-11-16 117 views
0

我需要排序的結果的Oracle查詢結果的幫助,我需要NULLS在頂部。甲骨文先空

MIN(SYSDATE - expiry) KEEP (DENSE_RANK FIRST ORDER BY SYSDATE - expiry DESC NULLS FIRST) AS active 

該結果去是這樣的:

ID  NAME    ACTIVE 
================================= 
4  John Smith   139 
4  John Smith   NULL 
4  John Smith   2700 
7  Martha Snow  NULL 

我想它,以便將結果進行排序,像這樣:

ID  NAME    ACTIVE 
================================= 
4  John Smith   NULL 
4  John Smith   139 
4  John Smith   2700 
7  Martha Snow  NULL 

感謝那些誰可以幫助!

+1

哈!它看起來像我可以在ORDER BY子句中進行排序。 ORDER BY active ASC NULLS FIRST –

+0

爲什麼你用ord by sysdate,但在你的數據中沒有日期 –

回答

0

您的聲明只是將值分配給第三列(推測)。它並未訂購整個數據集。結果集是無序,除非外部查詢具有order by

所以:

select . . . 
from . . . 
order by id, active asc nulls first; 

如果這是唯一的三列,那麼你可能甚至不需要keep。剛:

select id, name, (sysdate - expiry) as active 
from . . . 
order by id, active asc nulls first; 
+0

是的,我在發佈問題後試圖通過嘗試來解決這個問題。謝謝你的回答! –

0

SQL Fiddle

的Oracle 11g R2架構設置

CREATE TABLE Data (ID, NAME, ACTIVE) AS 
      SELECT 4, 'John Smith', 139 FROM DUAL 
UNION ALL SELECT 4, 'John Smith', NULL FROM DUAL 
UNION ALL SELECT 4, 'John Smith', 2700 FROM DUAL 
UNION ALL SELECT 7, 'Martha Snow', NULL FROM DUAL 

查詢1

SELECT * 
FROM Data 
ORDER BY ID, ACTIVE ASC NULLS FIRST 

Results

| ID |  NAME | ACTIVE | 
|----|-------------|--------| 
| 4 | John Smith | (null) | 
| 4 | John Smith | 139 | 
| 4 | John Smith | 2700 | 
| 7 | Martha Snow | (null) | 
+0

是的,我的確如此。感謝您提供答案。 –