带嵌套和分区的SQL嵌套查询

时间:2015-02-26 13:38:13

标签: sql oracle

我正在使用oracle数据库,并有以下表格:

ID  SYSTEM_NAME INTERFACE_NAME  TIMEIN              REQUEST         ORDER_ID    TARGET_SYSTEM_NAME  TARGET_INTERFACE_NAME   MSISDN  HOST    SOURCE
11  Logical     AddProduct      02/11/2015 08:35:00 This is request 0           RFCO                 XXX                    Host    

我想在每天一小时内选择最大请求数。就像当天和那小时以及过去15天一样的最大请求。

我正在使用此查询

SELECT * FROM (
SELECT count(*) as max_hour ,to_char(timein,'DD/MM/YYYY HH24') as date_hour 
FROM LOG_REQUEST PARTITION(req_2015_02_24)
where SYSTEM_NAME='Logical'
and INTERFACE_NAME='AddProduct'
--and trunc(timein)>= trunc(SYSDATE-15)
GROUP BY to_char(timein,'DD/MM/YYYY HH24')
ORDER BY COUNT(*) desc
)  where rownum =1;

因为我使用分区1天(日期),所以我在一天中的一个小时内给出了最大请求数,但我想要这个最后4或5个日期。

就像:

Max_Request_in_Hour Hour Date 
89                  21   02/02/2015
99                  9    03/02/2015
29                  8    04/02/2015

任何sql专家都可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

SELECT proc_date, max(cnt_hour) as max_hour, max(date_hour) keep (dense_rank first order by cnt_hour desc) as date_hour
  FROM (
SELECT count(*) as cnt_hour ,to_char(timein,'DD/MM/YYYY HH24') as date_hour, trunc(timein) as proc_date
 FROM LOG_REQUEST PARTITION(req_2015_02_24)
 where SYSTEM_NAME='Logical'
  and INTERFACE_NAME='AddProduct'
--and trunc(timein)>= trunc(SYSDATE-15)
GROUP BY to_char(timein,'DD/MM/YYYY HH24'), trunc(timein)
)
group by proc_date;