Если я правильно понимаю ваш вопрос, следующий подход может помочь получить ожидаемые результаты:
Таблица:
CREATE TABLE #Data (
[DateTime] datetime,
[Parameter] varchar(50),
[Value] varchar(10)
)
INSERT INTO #Data
([DateTime], [Parameter], [Value])
VALUES
('2019-10-13T15:01:25', 'Switch', 'on'),
('2019-10-13T15:01:37', 'Temp', '25'),
('2019-10-13T15:01:53', 'Pressure', '1006'),
('2019-10-13T15:04:41', 'Temp', '22'),
('2019-10-13T15:04:59', 'Switch', 'off'),
('2019-10-13T17:14:51', 'Switch', 'on'),
('2019-10-13T17:15:07', 'Temp', '27'),
('2019-10-13T17:17:43', 'Switch', 'off')
Заявление:
;WITH ChangesCTE AS (
SELECT
*,
CASE WHEN [Parameter] = 'Switch' AND [Value] = 'on' THEN 1 ELSE 0 END AS ChangeIndex
FROM #Data
), GroupsCTE AS (
SELECT
*,
SUM(ChangeIndex) OVER (ORDER BY [DateTime]) AS GroupIndex
FROM ChangesCTE
)
SELECT [GroupIndex], [Parameter], AVG(TRY_CONVERT(int, [Value]) * 1.0) AS [AvgValue]
FROM GroupsCTE
WHERE [Parameter] <> 'Switch'
GROUP BY [GroupIndex], [Parameter]
Результаты:
GroupIndex Parameter AvgValue
1 Pressure 1006.000000
1 Temp 23.500000
2 Temp 27.000000