首页 > 解决方案 > 取最大重叠日期范围

问题描述

我有一个表,其中包含 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

有人可以帮我吗?谢谢

标签: sqldateimpala

解决方案


我们可以尝试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;

推荐阅读