【问题标题】:How to pick the next Datetime for same AgentID in SQL如何在 SQL 中为相同的 AgentID 选择下一个日期时间
【发布时间】:2021-01-04 05:07:10
【问题描述】:

第一列 (CALL_START) 是某个特定 ID (CALLER_ID) 的人拨打电话的时间。 see snippet of data here.

现在我想挑选出相同 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 的新手,非常感谢任何帮助。

【问题讨论】:

    标签: mysql sql datetime subquery window-functions


    【解决方案1】:

    如果你运行的是 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
    

    【讨论】:

    • 第一个查询给了我 next_call 列,但 caller_id 在所有行中都显示为空
    • 请告诉我为什么第二个查询中有 2 个 from 语句?它显示了一个语法错误。
    • @Chloe:这是一个错字。固定
    • 我不认为这可以工作,因为记录是一个临时表。我上面提到过。你能告诉我另一种使用 rownumber 的 LEAD() 方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多