Запрос T-SQL: Как вставить среднее значение из последних 5 сообщений - PullRequest
0 голосов
/ 08 марта 2019

У меня есть база данных с сообщениями от нескольких устройств.Я строю алгоритм машинного обучения, и перед этим мне нужно вычислить некоторые средние значения из уже отправленных сообщений.

Я беру информацию из космической БД и хочу сохранить ее в таблице T-SQL.Я хочу взять текущее сообщение Температура + последние 4 сообщения и вычислить среднее значение и поместить его в отдельный столбец.Я видел много постов по этому поводу, но ни один из них не работает.

Это код, когда я пытаюсь добавить тестовое сообщение:

INSERT INTO PredictionMessages 
(
    [Temperature], 
    [Humidity], 
    [Created],
    [DeviceId],
    [temperatureAlert],
    [averageTempLast5]
)
VALUES 
(
    22, 55, GETDATE(), 1, 'false', 
    (
       SELECT TOP (5) AVG([Temperature]) 
       FROM Messages WHERE DeviceId = 1 
       GROUP BY Created 
       ORDER BY [Created] DESC 
    )
)
GO

Я пыталсянесколько разных подходов с разными проблемами, но это лучшая попытка.Это дает мне ErrorMessage:

Подзапрос возвратил более 1 значения.Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.

Что я делаю неправильно или естьпроще?

1 Ответ

0 голосов
/ 08 марта 2019

Обновление: просто исправил SQL, добавив псевдоним x к внутреннему подвыбору

Вам нужно изменить свой подзапрос, чтобы он возвращал только одно значение, сейчас он возвращает 5 из-за select top 5

Одним из подходов может быть сделать что-то вроде

SELECT AVG(x.Temperature) from (
SELECT TOP (5) Temperature 
       FROM Messages WHERE DeviceId = 1 
       ORDER BY [Created] DESC 
) x

вместо

SELECT TOP (5) AVG([Temperature]) 
       FROM Messages WHERE DeviceId = 1 
       GROUP BY Created 
       ORDER BY [Created] DESC 

Итак, в основном вы сначала выбираете верхние 5 строк на основе созданного столбца(давая результат псевдоним x), а затем объединяя их в одну строку

...