Хранимая процедура SQL Server для анализа потоковых данных и различий в отчетах - PullRequest
0 голосов
/ 03 ноября 2018

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

DataSnippet at 2 Mins Interval

Эти данные хранятся в таблице SQL Server.

Теперь я пытаюсь кодировать хранимую процедуру в SQL Server 2008, которая удовлетворяет этому условию:

Highest - Max(Start,End) > Absolute Value(Start - End),

ITEM3 выполняет это условие.

Кроме того, для ВСЕХ предметов, которые удовлетворяют вышеуказанному условию, он должен вернуться назад во времени и вернуть начало первой записи, которая удовлетворяет условию End (Value) > Start (Value)

Таким образом, в приведенном выше случае возвращаемое значение должно быть 209,1 & Item 3.

Условие выполняется для ITEM3 только в вышеприведенном случае @ 10: 21 А.М.

Дополнительное примечание: для целей этого запроса самые низкие значения не используются.

Кроме того, в этом потоке данных нет нулевых / нулевых значений (временно ...).

Из-за моих ограниченных знаний о подзапросах SQL и т. Д. Я не могу получить желаемый результат за пределами первого условия.

select desc 
from table1                     
where Highest - dbo.InlineMax(Start,End) > abs(Start- End)  

InlineMax - мой UDF, который возвращает более высокое значение.

ТИА

1 Ответ

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

Это должно дать вам то, что вы хотите.

SELECT 
    [desc], [highest], [start], [end]
FROM 
    items
GROUP BY 
    [desc], [highest], [start], [end]
HAVING
    (MAX([start]) > MAX([end]) and highest - MAX([start]) > ABS([start]-[end]))
    OR
    (MAX([start]) <= MAX([end]) and highest - MAX([end]) > ABS([start]-[end]))

сгруппируйте по соответствующим столбцам, а затем отфильтруйте его, используя предложение has.

  • Если max (начало)> max (конец), то требуется максимум - max (начало)> abs (начало-конец)
  • Если max (начало) <= max (конец), то требуется максимум - max (конец)> abs (начало-конец)
...