Один метод использует first_value()
:
select distinct caller_id, first_recipient_id
from (select pl.*,
first_value(recipient_id) over (partition by caller_id, date(call_start_time) order by call_start_time) as first_recipient_id,
first_value(recipient_id) over (partition by caller_id, date(call_start_time) order by call_start_time desc) as last_recipient_id
from phone_log pl
) pl
where first_recipient_id = last_recipient_id;
Используется такая функция, как date()
, которая извлекает дату из даты / времени. Функции даты и времени зависят от базы данных.