2

我正在尝试使用 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,但正在寻找解决方法。提前致谢!

4

1 回答 1

3

我认为明确写出逻辑比使用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

逻辑是。如果您有两个范围,范围 1 和范围 2 的开始和结束时间,那么当第一个在第二个结束之前开始并且第一个在第二个开始之后结束时,它们会重叠:

select (case when range1_start < range2_end and range1_end > range2_start
             then 1 else 0
        end) as overlaps
于 2014-10-06T18:45:29.927 回答