这是我正在使用的桌子。表名称为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
答案 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()
之类的函数从日期/时间中提取日期。日期/时间功能因数据库而异。