Использование Avg () с обновлением SQL - PullRequest
3 голосов
/ 21 мая 2009

У меня есть таблица с несколькими readings_miu_id, каждый с несколькими показаниями RSSI (RSSI также является именем поля). Итак, у меня в настоящее время есть таблица данных со многими столбцами, но две соответствующие для этого разговора выглядят примерно так:

readings_miu_id  RSSI
===============  ====
11011032         -90
11011032         -81
11011032         -62
11011032         -84
11011032         -86
11010084         -84
11010084         -86
11010084         -87

и так далее.

Мой первоначальный план состоял в том, чтобы изменить значение RSSI для каждой записи, имеющей тот же readings_miu_id со средним RSSI для этого readings_miu_id (который должен выглядеть так же, как и выше, за исключением того, что отдельные RSSI будут заменены средним RSSI для этого miu ), а затем вытащить только одну запись для каждого отдельного readings_miu_id (что я вполне уверен, что могу сделать с оператором select top 1 type.) Однако у меня возникают проблемы с вычислением первой части. Выражения sql, которые я пробовал, похоже, что они должны быть близки:

UPDATE analyzedCopy2 as A 
SET analyzedCopy2.RSSI = Avg(RSSI) 
where readings_miu_id = A.readings_miu_id

и

UPDATE analyzedCopy2 as A 
SET RSSI = Avg(select RSSI from analyzedCopy2 
    where readings_miu_id = A.readings_miu_id) 
WHERE readings_miu_id = A.readings_miu_id;

Помогите пожалуйста!

Ответы [ 3 ]

0 голосов
/ 26 мая 2009

Пожалуйста, посмотрите этот вопрос , где обсуждается похожий сценарий.

Запрос, который вы ищете, выглядит примерно так (у меня здесь нет оболочки SQL, поэтому возможны небольшие проблемы с синтаксисом):

UPDATE analyzedCopy2 AS target
INNER JOIN 
(
    select avg(RSSI) as AvgRSSI, readings_miu_id
    from analyzedCopy2 T
    group by readings_miu_id
) as source
ON target.readings_miu_id = source.readings_miu_id
SET target.RSSI = source.AvgRSSI
0 голосов
/ 13 июня 2009

См:

ACC: обновление запроса на основе общих сбоев запроса

«Такое поведение является конструктивным ограничением ... Существует три метода обхода этого поведения ...»

0 голосов
/ 21 мая 2009

Не уверен, почему вы хотите обновить записи.

Если вы просто хотите прочитать среднее значение, вы можете сделать это:

SELECT readings_miu_id, AVG(RSSI)
FROM analyzedCopy2 
GROUP BY readings_miu_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...