首页 > 解决方案 > 如何在 SQL 中为相同的 AgentID 选择下一个日期时间

问题描述

第一列 (CALL_START) 是某个特定 ID (CALLER_ID) 的某个人拨打电话的时间。在此处查看数据片段。

现在我想挑选出相同 ID 的下一个调用并将其存储在一个名为“Next_call”的新列中,如果没有下一个调用它存储 NULL。

所以这就是我想要的结果。

CALL_START             NEXT_CALL             CALLER_ID
2017-01-14 10:50:38   NULL                  2837061
2017-01-14 10:21:03   2017-01-14 10:50:38   2837061

CALLER_ID 应该相同才能找到下一个呼叫,所以我必须根据每个 ID 找到下一个呼叫。

到目前为止,我已经尝试过了。

select CALL_START, CALLER_ID
from call_data.records
where CALL_START > (select CALL_START from call_data.records group by CALLER_ID)
;

这个查询对我不起作用,我不知道该怎么做,因为我正在学习 sql 记录是我使用不同表的数据加入的临时表。

我是学习 SQL 的新手,所以任何帮助将不胜感激。

标签: mysqlsqldatetimesubquerywindow-functions

解决方案


如果您正在运行 MySQL 8.0,则可以使用lead()|

select 
    call_start, 
    lead(call_start) over(partition by caller_id order by call_start) next_call, 
    caller_id
from call_data.records r

在早期版本中,一种替代方法是子查询:

select
    call_start,
    (
        select min(r1.call_start) 
        from call_data.records r1 
        where r1.caller_id = r.caller_id and r1.call_start > r.call_start
    )  next_call,
    caller_id
from call_data.records r

推荐阅读