You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark SQL中如何关联重叠日期表并排除端点重合记录

问题:筛选Table B中与Table A存在实际日期重叠的行

注:仅端点日期重合的情况不算重叠


表结构与数据

Table A

idstart_dateend_date
12020-01-062020-01-07
12020-01-072020-01-08
12020-01-082020-01-09
12020-01-092020-01-10
12020-01-102020-01-11

Table B

idstart_dateend_date
22020-01-012020-01-02
22020-01-022020-01-03
22020-01-032020-01-04
22020-01-042020-01-05
22020-01-052020-01-06
22020-01-062020-01-07

需求

筛选Table B中与Table A存在实际日期重叠的行(仅端点重合不算),期望结果如下:

idstart_dateend_date
22020-01-062020-01-07

当前SQL的问题

原SQL使用包含端点的重叠判断逻辑,导致把仅端点重合的行也筛选出来:

SELECT DISTINCT b.*
FROM tableB b
INNER JOIN tableA a
  ON ((b.start_date <= a.end_date) AND (b.end_date >= a.start_date))

返回结果包含了不需要的记录:

idstart_dateend_date
22020-01-052020-01-06
22020-01-062020-01-07

正确的Spark SQL解决方案

修改连接条件,将包含端点的判断改为严格小于/大于,排除仅端点重合的情况:

SELECT DISTINCT b.*
FROM tableB b
INNER JOIN tableA a
  ON (b.start_date < a.end_date AND b.end_date > a.start_date)

验证结果

执行上述SQL后,将得到预期结果:

idstart_dateend_date
22020-01-062020-01-07

内容的提问来源于stack exchange,提问作者nathaneastwood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 08:26:32