Eclipsys Blog

Oracle 23ai: INTERVAL Data Type Aggregations – Eclipsys

Written by Anas Darkal | Feb 13, 2024 12:01:00 AM

Overview:

  • Oracle 23ai introduces the use of SUM and AVG functions with INTERVAL datatype
  • This enhancement makes it easier to calculate totals and averages over INTERVAL values

In this blog, I’ll demonstrate the use of SUM and AVG functions with INTERVAL datatype

Prerequisites:

  • Oracle Database 23ai Free Developer Release

 

Step #1: Preparation

The example in this blog requires the following table

drop table if exists trips purge;

create table trips (
  id          number,
  start_time  timestamp,
  end_time    timestamp,
  duration    interval day to second generated always as (end_time - start_time) virtual
);

begin
insert into trips (id, start_time, end_time) 
values (1, timestamp '2024-01-20 08:45:00.0', timestamp '2024-01-20 18:01:00.0');
insert into trips (id, start_time, end_time) 
values (2, timestamp '2024-01-22 09:00:00.0', timestamp '2024-01-22 17:00:00.0');
insert into trips (id, start_time, end_time) 
values (3, timestamp '2024-01-25 08:00:00.0', timestamp '2024-01-25 17:45:00.0');
insert into trips (id, start_time, end_time) 
values (4, timestamp '2024-01-27 07:00:00.0', timestamp '2024-01-27 16:00:00.0');
insert into trips (id, start_time, end_time) 
values (5, timestamp '2024-01-28 07:00:00.0', timestamp '2024-01-28 16:00:00.0');
insert into trips (id, start_time, end_time) 
values (6, timestamp '2024-01-29 07:00:00.0', timestamp '2024-01-29 16:00:00.0');
insert into trips (id, start_time, end_time) 
values (7, timestamp '2024-01-30 07:00:00.0', timestamp '2024-01-30 16:00:00.0');
insert into trips (id, start_time, end_time) 
values (8, timestamp '2024-01-31 07:00:00.0', timestamp '2024-01-31 16:00:00.0');
commit;
end;
/

 

Step #2: Testing 

1. If we use SUM or AVG functions on an INTERVAL datatype on the pre-23ai Oracle database, we will get an error as shown below.

 

2. Oracle 23ai database allows the use of SUM and AVG functions with INTERVAL datatype

select sum(duration),avg(duration) from trips;

– We can also use SUM and AVG as analytics functions with INTERVAL datatype

select id,start_time,end_time,duration,
sum(duration) over (order by id rows unbounded preceding) as DUR_RUN_TOTAL,
avg(duration) over (order by id rows unbounded preceding) as DUR_RUN_AVG
from trips;