假设我有两个范围:下面的a和b。
我在这里的目标不仅是计算a和b之间是否存在任何重叠,而且还要计算百分比重叠。
例如,记录1的值为0% 假设37-42是36-42的子集,则记录2将为100%, 记录3将为4/6,因为它缺少41和42,但包含37、38、39和40。
在vertica中有简单的方法吗?
答案 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