2017-08-11 84 views
0

的SQL腳本選擇最大計數自組活動

select eventid_nbr, trunc(received_date, 'DD'), sentindicator, count(eventid_nbr) as count 
from eventlog 
where received_date between to_date('2017-07-01, 10:00 A.M.','YYYY-MM-DD, HH:MI A.M.') and to_date('2017-07-01, 11:00 A.M.','YYYY-MM-DD, HH:MI A.M.') 
group by eventid_nbr, trunc(received_date, 'DD'), sentindicator 
order by count desc, trunc(received_date, 'DD'); 

具有輸出

EVENT RECEIVED_DATE SENTINDICATOR COUNT 

1  01-JUL-17  Y    128 
1  01-JUL-17  E1    2 
104 01-JUL-17  Y    55 
105 01-JUL-17  Y    4 
106 01-JUL-17  Y    3 

因此我需要選擇每一個事件當中最大計數,從而輸出將顯示爲

EVENT RECEIVED_DATE SENTINDICATOR COUNT 

1  01-JUL-17  Y   128 
104 01-JUL-17  Y   55 
105 01-JUL-17  Y   4 
106 01-JUL-17  Y   3 

對於每個分組,我是否需要選擇max(count)?我怎麼能做到這一點?

+0

我已經更新說明我的問題需要選擇與事件1相同的包含重複項的所有事件(可能是200),並且只包含那些列COUNT爲MAX(COUNT)的元組。對於非重複事件,例如104,105和106,它們的元組包含在結果集中,因此它們的計數已經是最大值(COUNT) – Mushy

回答

0

在Oracle 12c中,你可以這樣做:

select eventid_nbr, trunc(received_date, 'DD'), sentindicator, 
     count(eventid_nbr) as count 
from eventlog 
where received_date between to_date('2017-07-01, 10:00 A.M.','YYYY-MM-DD, HH:MI A.M.') and 
          to_date('2017-07-01, 11:00 A.M.','YYYY-MM-DD, HH:MI A.M.') 
group by eventid_nbr, trunc(received_date, 'DD'), sentindicator 
order by count desc, trunc(received_date, 'DD') 
fetch first 1 row only; 

在早期版本中,子查詢做同樣的事情:

select el.* 
from (select eventid_nbr, trunc(received_date, 'DD'), sentindicator, 
      count(eventid_nbr) as count 
     from eventlog 
     where received_date between to_date('2017-07-01, 10:00 A.M.','YYYY-MM-DD, HH:MI A.M.') and 
            to_date('2017-07-01, 11:00 A.M.','YYYY-MM-DD, HH:MI A.M.') 
     group by eventid_nbr, trunc(received_date, 'DD'), sentindicator 
     order by count desc, trunc(received_date, 'DD') 
    ) el 
where rownum = 1; 
+0

您能否根據對問題的編輯進行更詳細的闡述以進一步澄清? – Mushy

0
select eventid,dt,sentindicator,max(count) 
from 
(
    select eventid_nbr, trunc(received_date, 'DD') as dt, sentindicator, 
    count(eventid_nbr) as count 
    from eventlog 
    where received_date between to_date('2017-07-01, 10:00 A.M.','YYYY-MM-DD, 
    HH:MI A.M.') 
    and to_date('2017-07-01, 11:00 A.M.','YYYY-MM-DD, HH:MI A.M.' 
) 
    group by eventid_nbr, trunc(received_date, 'DD'), sentindicator 
    order by count desc, trunc(received_date, 'DD'))a 
group by eventid,dt,sentindicator 
+0

只需添加一個帶有max(count)的外部查詢作爲查詢的外部查詢 – Aparna

0
select eventid_nbr, received_day, max(sentindicator) keep(dense_rank last order by count), max(count) as count 
from (select eventid_nbr, trunc(received_date, 'DD') as received_day, sentindicator, count(*) as count 
     from eventlog 
     where received_date between to_date('2017-07-01, 10:00 A.M.','YYYY-MM-DD, HH:MI A.M.') and to_date('2017-07-01, 11:00 A.M.','YYYY-MM-DD, HH:MI A.M.') 
     group by eventid_nbr, trunc(received_date, 'DD'), sentindicator) 
group by eventid_nbr, received_day 
order by 4 desc, received_day;