2013-11-19 3 views
-1

я имею классическую таблицу с диапазонами:Oracle SQL проверка корреляционного диапазоны

Range1 - 1 - 3.99 
Range2 - 4 - 6.99 
Range3 - 7 - 10

есть ли хорошо известный SQL, встроенные функции Oracle, ничего ... чтобы проверить их корреляционные, рядом или рядом один за другим?

В приведенном выше примере проверка правильности. Так, 3.99 + 0.01 = 4, и это правильно

Если конец Range1 был 3.72 или самого начало из range2 был 4.12, что был неправ. Иррациональные числа, такие как Pi или значения с более чем двумя десятичными знаками, не допускаются.

спасибо. Отношения

ответ

2

Если предположить, что диапазоны не перекрываются, можно использовать LAG() функцию: оконной

with v_data as (
    select 'Range1' name, 1 low, 3.99 high from dual union all 
    select 'Range2' name, 4 low, 6.99 high from dual union all 
    select 'Range3' name, 7 low, 10 high from dual 
) 
select 
    v1.*, 
    lag(high) over (partition by 1 order by high) as prev_high , 
    low - lag(high) over (partition by 1 order by high) as diff 
from v_data v1 

Это вернет разницу в предыдущий диапазон в столбце «дифф»; если вы поместите это внутри другого запроса и фильтруете diff> 0.01, это вернет 0 строк, если ваши диапазоны достаточно близки.

+0

Благодарим вас за ответ. Я тестировал ваш запрос в SQLFiddle, и он работает отлично, вот что мне нужно. –

+0

@realspirituals, да, похоже. В SQL Fiddle я проверил его с диапазон1 от 1 до 7,99, и столбец «Diff» содержит значение, отличного от 0,01 (ссылочного правильного значения). –

1

Учитывая, что в допустимом наборе данных один компонент каждого диапазона определен как правильный только на основе его сравнения с другим значением в наборе, он имеет избыточные элементы данных.

Вы можете более точно определить набор данных, указав только нижние или верхние граничные значения и избегайте возможности получения недопустимых данных.

В целях отображения вы можете легко отрегулировать диапазоны, используя функцию окна «Ограждение»() или «Ввод»().

+0

Благодарим вас за ответ. Функция LAG спасет меня от работы. –

Смежные вопросы