我正在運行一個標準的查詢,加入PDCRLogtbl和PDCRSQLTbl以拉高影響力的CPU。我相信在大多數地方曾經使用/看過類似的。沒有退出它Teradata SQL PDCR查詢 - 篩選出只有高CPU級別(數據庫性能調優)的唯一查詢
SELECT
RANK(ImpactCPU) AS CPURank
,USERNAME
,sessionid
,AcctString
,/*--including additionally */ Hashrow (qrytext) Unique_SQL_ID
/* qrytext comes from SQLtbl.SQLTextinfo if available or its logtbl.querytext*/
<col list>
from
(SELECT a.USERNAME
, sessionid
-- , a.logdate
, a.ProcId
, a.QueryId
, a.expandacctstring
<calculations for CPU skew, Impact CPU , other skew's here>
from PDCRinfo.DBQLogtbl
where <filters here>
group by clause
) a
LOJ (sel < col list> from FROM PDCRInfo.DBQLSQLTbl s
where <filters here>) s on <join cols >
order by CPURank asc , spoolusage desc
O/P是這樣的
CPUrank Username <other cols> impactCPU Querytext Unique_SQL_ID
1 JohnD 50000 Sel foobar 1F-0C-A1-EB
5 JaneD 60000 sel yadaya A9-CE-55-1D
6 JohnD 35000 Sel foobar 1F-0C-A1-EB
9 JohnD 25000 Sel foobar 1F-0C-A1-EB
10 BobD 24000 sel Daddy 6E-1C-18-08
11 JaneD 23000 sel yadaya A9-CE-55-1D
12 JohnD 22500 Sel foobar 1F-0C-A1-EB
15 GeorgeD 22400 sel holahu 9B-4A-D1-F4
這裏SAMEUnique_SQL_ID
在不同的點1,6和9.I只想第一實例顯示出來 - 其中一個highest CPU rank
出現並忽略其餘部分。在所有相同的SQL在不同的場合運行後。
期望
CPUrank Username <other cols> impactCPU Querytext Unique_SQL_ID
1 JohnD 50000 Sel foobar 1F-0C-A1-EB
5 JaneD 60000 sel yadaya A9-CE-55-1D
10 BobD 24000 sel Daddy 6E-1C-18-08
15 GeorgeD 22400 sel holahu 9B-4A-D1-F4
我應該怎麼做?也許放在一個排位賽或類似的過濾器......某種類型的OLAP函數來通過這些行將過濾em。我想我可以通過一個dt
所有這些行的額外通過,但想看看是否有一個簡單的過濾器,我可以堅持在那裏可以做到這一點
謝謝!
原來的答案優雅地給了'row_num()over(PARTITION BY Unique_SQL_ID ORDER BY impactCPU DESC)'這正是我正在尋找的。但這是一個「有序分析函數」 - 你不能把它放在'where子句'或'having'中。這只是一個小修改。 MatBailie給出的答案的要點是abs。對 。我編輯它來反映這個小小的修復。謝謝你! – user1874594