Я запускаю стандартный запрос Query, соединяющий PDCRLogtbl с PDCRSQLTbl для вытаскивания высокоэффективного CPU. Я уверен, что аналогичный был использован/замечен раньше, в большинстве мест. Ничего об этом выходеTeradata SQL PDCR-запрос-фильтрация, чтобы получить только уникальные запросы с высоким рейтингом ЦП (настройка производительности базы данных)
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
о/р не что-то вроде этого
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.i просто хотите 1-й экземпляр - один с 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
, но хотел бы посмотреть, есть ли простой фильтр, который я могу вставить там, который может сделать работу так же хорошо
Спасибо!
Оригинальный ответ элегантно дал 'row_num() над (PARTITION BY Unique_SQL_ID ORDER BY impactCPU DESC)', который именно то, что я искал. Но это «упорядоченная аналитическая функция» - вы не можете вставлять ее в предложение 'where' или' have'. Это лишь незначительная модификация. Суть ответа, данного MatBailie, - абс. правильно . Я отредактировал его, чтобы отразить это незначительное исправление. Спасибо Mat! – user1874594