如何在Redshift中查询存在时间戳重叠的跨所有者产品记录
按产品分组查询时间戳重叠的跨所有者记录
需求说明
筛选同一产品下,时间区间与其他所有者记录存在重叠的条目,即找出同一时间区间内由不同所有者拥有的产品详情。
解决方案
方法1:自连接+去重
通过自连接关联同表数据,匹配同一产品、不同所有者且时间重叠的记录,用DISTINCT避免重复结果:
SELECT DISTINCT t1.* FROM your_table t1 JOIN your_table t2 ON t1.product = t2.product AND t1.owner != t2.owner AND t1.beginDate < t2.endDate AND t1.endDate > t2.beginDate ORDER BY t1.product, t1.beginDate;
方法2:EXISTS子查询
用子查询判断当前记录是否存在同产品、不同所有者的时间重叠记录,无需处理重复,性能更优:
SELECT * FROM your_table t1 WHERE EXISTS ( SELECT 1 FROM your_table t2 WHERE t2.product = t1.product AND t2.owner != t1.owner AND t2.beginDate < t1.endDate AND t2.endDate > t1.beginDate ) ORDER BY t1.product, t1.beginDate;
逻辑说明
- 时间重叠判定:
beginDate < 对方endDate AND endDate > 对方beginDate是通用的时间区间重叠判断条件,能覆盖部分重叠、完全包含等所有重叠场景。 - 关联限制:确保仅匹配同一产品下的不同所有者记录,排除跨产品或同一所有者的无效匹配。
示例验证
将提供的示例数据代入上述查询,会得到期望输出:
| owner | product | beginDate | endDate |
|---|---|---|---|
| B | one | 2017-09-26 | 2019-09-10 |
| C | one | 2019-09-01 | 2020-01-05 |
| E | two | 2017-08-01 | 2018-09-08 |
| F | two | 2017-12-03 | 2018-11-30 |
内容的提问来源于stack exchange,提问作者Kavya shree
相关产品推荐
相关产品推荐

