Вопрос по sql, grouping – Подсчет количества записей час за часом между двумя датами в оракуле

3

Мне нужен один запрос, который делает эту последовательность в оракуле.

select count(*) from table1
where request_time < timestamp'2012-05-19 12:00:00' and (end_time > timestamp'2012-05-19 12:00:00' or end_time=null);

select count(*) from table1
where request_time < timestamp'2012-05-19 13:00:00' and (end_time > timestamp'2012-05-19 13:00:00' or end_time=null);

select count(*) from table1
where request_time < timestamp'2012-05-19 14:00:00' and (end_time > timestamp'2012-05-19 14:00:00' or end_time=null);

select count(*) table1
where request_time < timestamp'2012-05-19 15:00:00' and (end_time > timestamp'2012-05-19 15:00:00' or end_time=null);

select count(*) from table1
where request_time < timestamp'2012-05-19 16:00:00' and (end_time > timestamp'2012-05-19 16:00:00' or end_time=null);

Как видите, час увеличивается один за другим. вот вывод

COUNT(*)               
1085                   

COUNT(*)               
1233                   

COUNT(*)               
1407                   

COUNT(*)               
1322                   

COUNT(*)               
1237

Я написал запрос, но он не дает мне правильный ответ!

select col1, count(*) from
(select TO_CHAR(request_time, 'YYYY-MM-DD HH24') as col1 from table1
 where request_time <= timestamp'2012-05-19 12:00:00' and (end_time >= timestamp'2012-05-19 12:00:00' or end_time=null))
group by col1 order by col1;

этот запрос дает мне результирующий набор, в котором сумма его количества (*) равна первому запросу, написанному выше! вот результат:

COL1          COUNT(*)               
------------- ---------------------- 
2012-05-19 07      22                     
2012-05-19 08      141                    
2012-05-19 09      322                    
2012-05-19 10      318                    
2012-05-19 11      282  

Ваш Ответ

4   ответа
0

select TO_CHAR(request_time, 'HH24') as "hourOfDay",count(*)as
"numOfLogin", TO_CHAR(request_time, 'DD') as "date" from table1 
where request_time<= timestamp'2017-08-04 23:59:59' and
(request_time>= timestamp'2017-08-03 00:00:01' ) group by
TO_CHAR(request_time, 'HH24'),TO_CHAR(request_time, 'DD');
1

ваши индивидуальные запросы совпадают с перекрывающимися наборами записей. Было бы полезно, если бы вы включили несколько примеров данных в свой вопрос, но я могу догадаться ...

Например, все записи, имеющие end_time = null и request_time = 2012-05-19 13:30:00, будут подсчитаны как первым, так и вторым запросами; но они будут учитываться только один раз в вашем & quot; общем & quot; запрос.

Может быть, вы хотели запросить диапазон дат в request_time вместо открытого предиката, напримерrequest_time < timestamp'2012-05-19 12:00:00'?

Error: User Rate Limit Exceeded Heidarzadeh
Error: User Rate Limit Exceeded Heidarzadeh
18

trunc выражение со значениями даты. Вы можете опуститьalter session если вы не запускаете запрос в sql * plus.

SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

SQL> SELECT 
       trunc(created,'HH'), 
       count(*) 
     FROM 
       test_table 
     WHERE 
       created > trunc(SYSDATE -2) 
     group by trunc(created,'HH');


TRUNC(CREATED,'HH')   COUNT(*)
------------------- ----------
2012-05-21 09:00:00        748
2012-05-21 16:00:00         24
2012-05-21 17:00:00         12
2012-05-21 22:00:00        737
2012-05-21 23:00:00        182
2012-05-22 20:00:00         16
2012-05-22 21:00:00        293
2012-05-22 22:00:00        610

8 ROWS selected.
Error: User Rate Limit ExceededCOUNT(*)Error: User Rate Limit Exceededcount(*)Error: User Rate Limit Exceededsum(count(*)) over (order by trunc(created,'HH')).
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Heidarzadeh
Error: User Rate Limit Exceeded Heidarzadeh
Error: User Rate Limit Exceededtrunc(created,'HH')Error: User Rate Limit Exceededgroup by?
1

ВЫБРАТЬ        to_char (обновлено, "DD-MM-YYYY HH"),        кол-(*)      ОТ        покупатель      ГДЕ         trunc (обновлено) & gt; = to_Char ("02-Jul-2017")     И trunc (обновлено) & lt; = to_Char ("02-Jul-2017")      сгруппировать по to_char (обновлено, "DD-MM-YYYY HH")

Похожие вопросы