2015-06-15 4 views
0

Я пытаюсь заменить нулевые значения на последние 10 секунд. Среднее значение в аналитике потока. для этого требуется самосоединение между потоком и средними значениями, которые я вычисляю в предложении With. Это дает мне дубликаты (я получаю одну и ту же запись дважды или трижды)? Любые предложения о том, что неправильно или как это сделать правильно? Мой запрос:Практическое руководство.

WITH MV AS (Select AVG([Sensor_1]) AS [Sensor_1] From [input] GROUP BY SlidingWindow(second, 10)) 
SELECT [input].[ID] 
,[input].[Timestamp] 
,[input].[Result] 
,CASE 
    WHEN [input].[Sensor_1] = 0 
    THEN [MV].[Sensor_1] ELSE [input].[Sensor_1] 
    END [Sensor_1] 
,[input].[Sensor_2] 
,[input].[Sensor_3] 
FROM [input] 
LEFT OUTER JOIN [MV] 
ON DateDiff(second, [input], [MV]) BETWEEN 0 AND 10 

ответ

0

Извините за задержку в реагировании на это.

Самое простое решение состоит в изменении ПО DateDiff (второй, [ввод], [MV]) от 0 до 10 с ПО DateDiff (миллисекунды, [ввод], [М.]) = 0.

Это потому что временные метки, заданные в шаге MV, относятся к последнему событию, которое попало в SlidingWindow, и те будут соответствовать временной отметке события в Input (обратите внимание: чем меньше единица времени лучше, чем в матче, но, опыт тестирования браузера, то миллисекунда является наименьшим поддерживаемым модулем).

Обратите внимание, что в то время как мы можем удалить дубликаты, удалив ненужные совпадения в JOIN, в общем, у Stream Analytics нет механизма для удаления дубликатов через DISTINCT или что-то в этом роде.

Ziv.