SQL查找给定日期同一人的第一个和最后一个电话的呼叫者

时间:2020-02-06 20:39:59

标签: sql presto

这是我正在使用的桌子。表名称为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 个答案:

答案 0 :(得分:2)

一种方法使用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()之类的函数从日期/时间中提取日期。日期/时间功能因数据库而异。