【问题标题】:Take the max overlap date range取最大重叠日期范围
【发布时间】:2021-10-13 16:29:29
【问题描述】:

我有一个包含 3 列的表,我需要从中获取特定 cust_id 的最大日期范围。

cust_id from_date to_date

101 2018-08-03 00:00:00 9999-12-31 00:00:00

101 2018-08-05 00:00:00 2021-02-01 00:00:00

101 2018-08-01 00:00:00 2019-02-01 00:00:00

::impala:: 中的预期结果:

id from_date to_date

101 2018-08-03 00:00:00 9999-12-31 00:00:00

有人可以帮我吗?谢谢

【问题讨论】:

    标签: sql date impala


    【解决方案1】:

    我们可以尝试一个LIMIT 查询,使用按起止日期的日期差排序:

    SELECT cust_id, from_date, to_date
    FROM yourTable
    WHERE cust_id = 101
    ORDER BY DATEDIFF(to_date, from_date) DESC
    LIMIT 1;
    

    要查找所有个客户的最大差异记录,我们可以使用RANK

    WITH cte AS (
        SELECT t.*, RANK() OVER (PARTITION BY cust_id
                                 ORDER BY DATEDIFF(to_date, from_date) DESC) rnk
        FROM yourTable t
    )
    
    SELECT cust_id, from_date, to_date
    FROM cte
    WHERE rnk = 1;
    

    【讨论】:

    • 谢谢@tim。抱歉,我稍微更新一下表格。如果存在其他不重叠的日期范围,则将出现在输出中。如果我们取 rnk=1,我想所有其他日期范围都将被省略。
    • 你完全改变了你的整个问题。不幸的是,我不会更新我的答案。祝你好运!
    • 有人可以帮忙吗? @蒂姆道歉
    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    相关资源
    最近更新 更多