计算两个范围的vertica sql的重叠百分比

时间:2018-11-12 16:24:53

标签: sql vertica

假设我有两个范围:下面的a和b。

我在这里的目标不仅是计算a和b之间是否存在任何重叠,而且还要计算百分比重叠。

例如,记录1的值为0% 假设37-42是36-42的子集,则记录2将为100%, 记录3将为4/6,因为它缺少41和42,但包含37、38、39和40。

在vertica中有简单的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用greatest()least()

select least(least(hours_to_b, hours_to_a) - greatest(hours_from_b, hours_from_a)), 0) /
       (greatest(hours_to_b, hours_to_a) - least(hours_from_b, hours_from_a)) as overlap_ratio

编辑:

哦,您希望在“ b”中与“ a”重叠,而不是两者的整体重叠。这是相似的:

select (least(least(hours_to_b, hours_to_a) - greatest(hours_from_b, hours_from_a)), 0) /
        (hours_to_b - hours_from_b)
       ) as overlap_ratio