select * from Tab t1 cross apply ( select top 1 from Tab t2 where t2.Time > t1.Time and abs(t2.Val-t1.Val) > @diff order by t2.Time asc ) t2
Пытаюсь сделать такую вещь: таблица: время, значение
надо найти минимальный интервал, на котором значения будут разниться больше чем некоторая величина. Для каждой строки, можно ен по всем данным, а по нескольким вперёд (30 скажем) Мне вот такой запрос подсказали, но никгода раньше с cross у меня дел не было. Вот что пишут про него:
CROSS APPLY формирует уникальную пару каждого элемента коллекции слева с элементом коллекции, полученным путем вычисления выражения справа.При использовании оператора CROSS APPLY, выражение справа функционально зависимо от элемента слева, как показано в следующем примере связанной коллекции:
SELECT c, f FROM C AS c CROSS APPLY c.Assoc AS f
Поведение CROSS APPLY аналогично поведению списка соединения.Если выражение справа принимает значение пустой коллекции, оператор CROSS APPLY не формирует пар для этого экземпляра элемента слева.