我正在运行一个标准查询,将PDCRLogtbl与PDCRSQLTbl连接起来,以提取高影响的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 desco/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在这里,相同的 Unique_SQL_ID出现在不同的位置1、6和9中,我只想要第一个实例--一个具有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函数来传递那些行,这将过滤掉它们。我想我可以通过一个dt额外传递所有这些行,但我想看看是否有一个简单的过滤器,我可以坚持在那里,可以完成同样的工作
谢谢!
发布于 2016-04-26 11:57:09
在查询结束时添加此筛选器,将给出修复。
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。对啊。谢谢马特
https://stackoverflow.com/questions/36863018
复制相似问题