Если вам нужно среднее время для клиента между одним заказом и заказом двух заказов назад.Тогда решение будет следующим:
- сначала сгенерируйте заказанный список для каждого клиента
- Затем объедините каждый заказ с двумя шагами назад.
@ akk0rd87: Я позаимствовал ваши данные.
with orders as
(select 001 custid, date '2019-01-01' OrderDate from dual union all
select 001 custid, date '2019-01-02' OrderDate from dual union all
select 001 custid, date '2019-01-03' OrderDate from dual union all
select 001 custid, date '2019-01-04' OrderDate from dual union all
select 001 custid, date '2019-01-05' OrderDate from dual union all
select 002 custid, date '2019-01-06' OrderDate from dual union all
select 002 custid, date '2019-01-05' OrderDate from dual union all
select 002 custid, date '2019-01-07' OrderDate from dual union all
select 002 custid, date '2019-01-10' OrderDate from dual union all
select 002 custid, date '2019-01-20' OrderDate from dual
),
ordered_orders as (select custid, orderdate, row_number() over (partition by custid order by orderdate) onum
from orders o)
select co.custid, avg(trunc(co.orderdate) - trunc(oo.orderdate)) adays
from ordered_orders co, ordered_orders oo
where oo.onum = co.onum - 2
and oo.custid = co.custid
group by co.custid;