2016-04-26 1 views
0

Я запускаю стандартный запрос 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, но хотел бы посмотреть, есть ли простой фильтр, который я могу вставить там, который может сделать работу так же хорошо
Спасибо!

ответ

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, - абс. правильно . Спасибо Mat

+0

Оригинальный ответ элегантно дал 'row_num() над (PARTITION BY Unique_SQL_ID ORDER BY impactCPU DESC)', который именно то, что я искал. Но это «упорядоченная аналитическая функция» - вы не можете вставлять ее в предложение 'where' или' have'. Это лишь незначительная модификация. Суть ответа, данного MatBailie, - абс. правильно . Я отредактировал его, чтобы отразить это незначительное исправление. Спасибо Mat! – user1874594

Смежные вопросы