SQL, чтобы найти звонящих первым и последним телефонным звонком тому же человеку в данный день - PullRequest
0 голосов
/ 06 февраля 2020

Вот таблица, с которой я работаю. Имя таблицы - phone_log

caller_id  recipient_id        call_start_time
1          2                  2012-04-19 09:00:00
2          3                  2012-04-19 17:00:00
1          2                  2012-04-19 23:00:00
...       ...                             ...

Мне нужно выяснить, кто сделал первый и последний звонок одному и тому же человеку в определенный день. Я понятия не имею, с чего начать. Цените любые советы по этому вопросу.

Мой желаемый результат будет выглядеть так:

caller_id    recipient_id        call_start_time
   1             2                 2012-04-19   

1 Ответ

2 голосов
/ 06 февраля 2020

Один метод использует 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(), которая извлекает дату из даты / времени. Функции даты и времени зависят от базы данных.

...