Интуитивно понятный запрос выглядит хорошо, но под прикрытием происходит то, что Azure Stream Analytics использует файл справочных данных, который действовал на момент каждого временного окна.Затем, когда он видит четное число предыдущего дня, он будет использовать контрольные данные, представленные в это время (что может сделать сравнение p.ActivityDateTime> p.GateOpen True для предыдущего времени открытия).
Iизменил запрос следующим образом (предположим, у вас есть 1 открытое событие в день на раздел).Дайте мне знать, если это работает для вас.Если этого не произойдет, вы можете отправить пример данных, чтобы я мог соответствующим образом изменить запрос.Мы рассмотрим, как сделать эти запросы проще для написания.
WITH thirdtysecReporting AS
(
SELECT
p.Section Section,
DATETIMEFROMPARTS(DATEPART(year, System.Timestamp), DATEPART(month, System.Timestamp), DATEPART(day, System.Timestamp), 0, 0, 0, 0) as date,
System.Timestamp Windowend,
SUM(p.sales_amt_gross) thirtysecSales
FROM input TIMESTAMP BY p.ActivityDateTime
GROUP BY TumblingWindow(second, 30), p.Section
)
,hopping AS
(
SELECT
Section,
System.Timestamp HopEnd,
date,
SUM(thirtysecSales) SumSales
FROM thirdtysecReporting
GROUP BY HoppingWindow(second, 86400, 30), Section, date -- Hopping on 24 hours, reported every 30 second
)
,filtered as -- This step ignores data from the previous day
(
SELECT
Section,
HopEnd,
date,
SUMQt = CASE
WHEN DAY(HopEnd) = DAY(date) OR DATEPART(hour, HopEnd) = DATEPART(hour, date) THEN SumSales
ELSE 0
END
FROM hopping
)
SELECT Section, -- Final query
HopEnd,
MAX(SUMQt) AS SumQt
FROM filtered
GROUP BY TumblingWindow(hour, 1), Section, hopend
Спасибо,
JS - Azure Stream Analytics