2016-04-26 56 views
0

我正在運行一個標準的查詢,加入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所有這些行的額外通過,但想看看是否有一個簡單的過濾器,我可以堅持在那裏可以做到這一點
謝謝!

回答

1

在查詢結尾處添加此過濾器將提供修復。

qualify 
     ROW_NUMBER() OVER (PARTITION BY Unique_SQL_ID 
           ORDER BY impactCPU DESC 
         ) 
          = 1 

原始答案優雅給了row_num() over (PARTITION BY Unique_SQL_ID ORDER BY impactCPU DESC),這正是我正在尋找。但是這是一個有序的分析函數 - 你不能將它粘在where子句或having子句中。這只是一個小修改。 MatBailie給出的答案的要點是abs。對 。謝謝墊子

+0

原來的答案優雅地給了'row_num()over(PARTITION BY Unique_SQL_ID ORDER BY impactCPU DESC)'這正是我正在尋找的。但這是一個「有序分析函數」 - 你不能把它放在'where子句'或'having'中。這只是一個小修改。 MatBailie給出的答案的要點是abs。對 。我編輯它來反映這個小小的修復。謝謝你! – user1874594