0

サーバー名に基づいてOracleテーブルから最新の値を取得しようとしています。私は次のSQLを持っています:

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%')

ここで何が間違っているのでしょうか?

4

2 に答える 2

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

これが最善の解決策であるかどうかはわかりませんが、今のところ機能しています。

于 2013-06-11T14:57:01.557 に答える
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;
于 2013-06-11T14:30:36.267 に答える