我正在尝试使用和重叠功能,如在ORACLE或Netezza中,它采用两个日期范围并检查它们是否相互重叠。
像这样的东西:
SELECT (TIMESTAMP '2011-01-28 00:00:00', TIMESTAMP '2011-02-01 23:59:59') OVERLAPS (TIMESTAMP '2011-02-01 00:00:00', TIMESTAMP '2011-02-01 23:59:59');
在Impala或SparkSQL中执行此操作的最佳方法是什么?不幸的是,Impala或SparSQL中不存在OVERLAPS。 我唯一能想到的是UDF,但正在寻找一种解决方法。 提前谢谢!
答案 0 :(得分:2)
我认为明确地写出逻辑比使用OVERLAPS
更清楚。例如,是否包括终点?
逻辑是:
select (case when TIMESTAMP '2011-01-28 00:00:00' < TIMESTAMP '2011-02-01 23:59:59' AND
TIMESTAMP '2011-02-01 00:00:00' < TIMESTAMP '2011-02-01 23:59:59'
then 1 else 0
end) as overlaps
逻辑是。如果你有两个范围,range1和range2有开始和结束时间,那么当第一个在第二个结束之前开始而第一个在第二个结束之后结束时它们重叠:
select (case when range1_start < range2_end and range1_end > range2_start
then 1 else 0
end) as overlaps