首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Teradata查询-筛选出只获得具有高CPU级别的唯一查询(数据库性能优化)

Teradata查询-筛选出只获得具有高CPU级别的唯一查询(数据库性能优化)
EN

Stack Overflow用户
提问于 2016-04-26 11:01:48
回答 1查看 930关注 0票数 0

我正在运行一个标准查询,将PDCRLogtbl与PDCRSQLTbl连接起来,以提取高影响的CPU。我敢肯定,大多数地方都曾使用过/见过类似的。这件事没什么好说的

代码语言:javascript
复制
    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是这样的

代码语言:javascript
复制
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

在这里,相同的 Unique_SQL_ID出现在不同的位置1、6和9中,我只想要第一个实例--一个具有highest CPU rank的实例,而其他的实例则被忽略。毕竟,在不同的情况下,相同的SQL正在运行。

所需

代码语言:javascript
复制
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函数来传递那些行,这将过滤掉它们。我想我可以通过一个dt额外传递所有这些行,但我想看看是否有一个简单的过滤器,我可以坚持在那里,可以完成同样的工作

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-26 11:57:09

在查询结束时添加此筛选器,将给出修复。

代码语言:javascript
复制
  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。对啊。谢谢马特

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36863018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档