Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Get sum by hour interval

Sevdimali IsayevOct 12 2017 — edited Oct 12 2017

Hello,

Create table and insert statement are below:

CREATE TABLE message_cnt

(

CDATE DATE,

count NUMBER

);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 05:00:00','mm/dd/yyyy hh24:mi:ss'),10);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 19:00:00','mm/dd/yyyy hh24:mi:ss'),8);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 10:00:00','mm/dd/yyyy hh24:mi:ss'),10);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 18:00:00','mm/dd/yyyy hh24:mi:ss'),8);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 15:00:00','mm/dd/yyyy hh24:mi:ss'),47);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 16:00:00','mm/dd/yyyy hh24:mi:ss'),15);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 23:00:00','mm/dd/yyyy hh24:mi:ss'),8);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 14:00:00','mm/dd/yyyy hh24:mi:ss'),11);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 22:00:00','mm/dd/yyyy hh24:mi:ss'),9);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 02:00:00','mm/dd/yyyy hh24:mi:ss'),6);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 04:00:00','mm/dd/yyyy hh24:mi:ss'),8);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 09:00:00','mm/dd/yyyy hh24:mi:ss'),8);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 17:00:00','mm/dd/yyyy hh24:mi:ss'),9);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 20:00:00','mm/dd/yyyy hh24:mi:ss'),7);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 00:00:00','mm/dd/yyyy hh24:mi:ss'),6);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 13:00:00','mm/dd/yyyy hh24:mi:ss'),10);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 01:00:00','mm/dd/yyyy hh24:mi:ss'),8);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 08:00:00','mm/dd/yyyy hh24:mi:ss'),9);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 11:00:00','mm/dd/yyyy hh24:mi:ss'),8);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 12:00:00','mm/dd/yyyy hh24:mi:ss'),9);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 21:00:00','mm/dd/yyyy hh24:mi:ss'),9);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 06:00:00','mm/dd/yyyy hh24:mi:ss'),10);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 07:00:00','mm/dd/yyyy hh24:mi:ss'),10);

insert into message_cnt (cdate, count) values (to_date('10/12/2017 03:00:00','mm/dd/yyyy hh24:mi:ss'),8);

My Requirment is get sum of the count by three hour interval.

Expected output:

pastedImage_7.png

I make this script, it works but I think there will be pretty good solutions for this situation...

select '10/12/2017 00:00:00 to 10/12/2017 03:00:00' as cdate, sum(count) from message_cnt where cdate > trunc(sysdate) + 0/24 and cdate <= trunc(sysdate) + 3/24

union all

select '10/12/2017 03:00:00 to 10/12/2017 06:00:00' as cdate, sum(count) from message_cnt where cdate > trunc(sysdate) + 3/24 and cdate <= trunc(sysdate) + 6/24

union all

select '10/12/2017 06:00:00 to 10/12/2017 09:00:00' as cdate, sum(count) from message_cnt where cdate > trunc(sysdate) + 6/24 and cdate <= trunc(sysdate) + 9/24

union all

select '10/12/2017 09:00:00 to 10/12/2017 12:00:00' as cdate, sum(count) from message_cnt where cdate > trunc(sysdate) + 9/24 and cdate <= trunc(sysdate) + 12/24

union all

select '10/12/2017 12:00:00 to 10/12/2017 15:00:00' as cdate, sum(count) from message_cnt where cdate > trunc(sysdate) + 12/24 and cdate <= trunc(sysdate) + 15/24

union all

select '10/12/2017 15:00:00 to 10/12/2017 18:00:00' as cdate, sum(count) from message_cnt where cdate > trunc(sysdate) + 15/24 and cdate <= trunc(sysdate) + 18/24

union all

select '10/12/2017 18:00:00 to 10/12/2017 21:00:00' as cdate, sum(count) from message_cnt where cdate > trunc(sysdate) + 18/24 and cdate <= trunc(sysdate) + 21/24

union all

select '10/12/2017 21:00:00 to 10/13/2017 00:00:00' as cdate, sum(count) from message_cnt where cdate > trunc(sysdate) + 21/24 and cdate <= trunc(sysdate) + 1

For cdate in output it is not important to like mine .

It will also be three column here like this(from_date, to_date, sum(count))

i just want to see interval(three hour) and sum(*) as output,

Thanks...

Message was edited by: Sevdimali Isayev insert script updated.

This post has been answered by Frank Kulash on Oct 12 2017
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Nov 9 2017
Added on Oct 12 2017
12 comments
780 views