select decode(nvl(to_char(s.sid),-1),-1,'DISCONNECTED','CONNECTED') "STATUS", topsession.session_id "SESSION_ID", u.name "NAME", topsession.session_serial# serial#, topsession.sql_id "SQL_ID", topsession.program "PROGRAM", max(topsession.CPU) "CPU", max(topsession.WAITING) "WAITING", max(topsession.IO) "IO", max(topsession.TOTAL) "TOTAL" from ( select ash.session_id, ash.session_serial#, ash.user_id, ash.sql_id, ash.program, sum(decode(ash.session_state,'ON CPU',1,0)) "CPU", sum(decode(ash.session_state,'WAITING',1,0)) - sum(decode(ash.session_state,'WAITING', decode(en.wait_class,'User I/O',1, 0 ), 0)) "WAITING" , sum(decode(ash.session_state,'WAITING', decode(en.wait_class,'User I/O',1, 0 ), 0)) "IO" , sum(decode(session_state,'ON CPU',1,1)) "TOTAL" from user_ash_history ash, v$event_name en where en.event# = ash.event# and to_char(SAMPLE_TIME,'DD-MON-YY HH24:MI') between '&EnterStartTIME' and '&EnterEndTime' group by session_id,user_id,session_serial#,program,sql_id order by sum(decode(session_state,'ON CPU',1,1)) ) topsession, v$session s, sys.user$ u where u.user# =topsession.user_id and s.username!='DBMANAGER' and /* outer join to v$session because the session might be disconnected */ topsession.session_id = s.sid (+) and topsession.session_serial# = s.serial# (+) group by topsession.session_id, topsession.session_serial#, topsession.sql_id, topsession.program, s.username,s.sid,s.paddr,u.name order by max(topsession.IO) desc /