Несмотря на то, что предоставленные вами данные были очень маленькими и недостаточно богатыми, чтобы охватить все случаи, здесь приведен sql, который рассчитает разницу в количестве недель между каждым вызовом и последним вызовом в группе и подсчитает количество вызовов для каждого из них.группа для разницы за конкретную неделю.
with your_table as (
select 1 as "callid", to_date('6-1-18','dd-mm-rr') as "date", 'a1' as "group" from dual
union select 2, to_date('6-1-18','mm-dd-rr'), 'a2' from dual
union select 3, to_date('7-1-18','mm-dd-rr'), 'a3' from dual
union select 4, to_date('8-1-18','mm-dd-rr'), 'a1' from dual
union select 5, to_date('9-1-18','mm-dd-rr'), 'a2' from dual
union select 6, to_date('6-1-18','mm-dd-rr'), 'a4' from dual
),
data1 as (
select t.*, max(t."date") over (partition by t."group") last_call_dt from your_table t
),
data2 as (select t.*, round((last_call_dt-t."date")/7,0) as weeks_diff from data1 t)
select * from (
select t.weeks_diff, t."callid", t."group" from data2 t
)
PIVOT
(
COUNT("callid")
FOR "group" IN ('a1', 'a2', 'a3','a4')
)
order by weeks_diff
, чтобы попробовать ее с вашей таблицей, просто внесите следующее изменение:
с your_table as (выберите * из my_table), ....
дайте мне знать, как это происходит:)