2013-06-11 27 views
0

我試着從基於服務器名稱的oracle表中獲取最新值。我有以下的SQL:如何檢索oracle表中的最新值

SELECT T."Node",T."Timestamp",T."MAX_User_CPU_Pct", T."MAX_System_CPU_Pct" 
FROM DW.KPX_CPU_DETAIL_HV T where T."Node"='serverA%' and T."Timestamp"= 
(select max(P."Timestamp") from DW.KPX_CPU_DETAIL_HV P where P."Node"='serverA%') 

它似乎並沒有工作,任何想法我可能會做錯在這裏?

+2

「*似乎沒有工作*」是無效的Oracle錯誤消息。 –

+0

雖然不太可能加快你的查詢速度,但它在我看來好像是'P.「Node'='serverA%''應該是'P.」Node「就像'serverA%'' - 是你現有的問題查詢它返回沒有記錄? –

+0

SQL看起來不錯。它應該工作。 –

回答

0
SELECT T."Node",T."Timestamp",T."MAX_User_CPU_Pct", T."MAX_System_CPU_Pct" 
FROM (SELECT * FROM DW.KPX_CPU_DETAIL_HV T where T."Node" like 'serverA%' ORDER BY T."Timestamp" DESC) T 
WHERE ROWNUM = 1 

這爲我做,不知道這是最好的解決辦法,但對於工作現在。

0

試試這個,實際上可能會快於子選擇(即使它是正確的):

SELECT T."Node", 
     T."Timestamp", 
     T."MAX_User_CPU_Pct", 
     T."MAX_System_CPU_Pct" 
FROM (
    SELECT p.*, 
     row_Number() over (partition by p."Node" order by p."Timestamp" desc) as rn 
    FROM DW.KPX_CPU_DETAIL_HV p 
) t 
where rn = 1; 
+0

這也需要很長時間才能完成。我需要它非常快。 – user1471980

+1

@ user1471980:向我們展示執行計劃和包含任何索引的表的定義。編輯您的問題,不要將其作爲評論發佈。 –