Рассчитать процент перекрытия для двух диапазонов Vertica SQL - PullRequest
0 голосов
/ 12 ноября 2018

Предположим, у меня есть два диапазона: a и b ниже.

Моя цель здесь не просто вычислить, есть ли какое-либо совпадение между a иб, но для расчета процентного совпадения.

Например, запись 1 будет иметь 0%, запись 2 будет 100%, учитывая, что 37-42 является подмножеством 36-42, запись 3 будет 4/6, учитывая, что в ней отсутствуют 41 и 42, но содержит37,38,39 и 40.

Есть ли простой способ сделать это в Vertica?

1 Ответ

0 голосов
/ 12 ноября 2018

Вы можете использовать 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

EDIT:

О, вы хотите, чтобы перекрытие с "a" внутри "b", а не общее совпадение двух. Это похоже:

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
...