使用Avg()和SQL更新

时间:2009-05-21 16:31:18

标签: sql ms-access sql-update

我有一个包含多个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

等等。

我最初的计划是将具有相同readings_miu_id的每条记录的RSSI值更改为该readings_miu_id的平均RSSI(除了单个RSSI将替换为该miu的平均RSSI之外,它应与上述相同) ),然后为每个不同的readings_miu_id只拉一条记录(我很确定我可以用select top 1类型语句。)但是我在解决第一部分问题时遇到了问题。我试过的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 :(得分:0)

请参阅:

ACC: Update Query Based on Totals Query Fails

“此行为是设计限制......有三种解决此问题的方法......”

答案 1 :(得分:0)

不确定为什么要更新记录。

如果你只想要一个平均读数,你可以这样做:

SELECT readings_miu_id, AVG(RSSI)
FROM analyzedCopy2 
GROUP BY readings_miu_id

答案 2 :(得分:0)

请参阅此question,其中讨论了类似的情况。

您正在寻找的查询是这样的(我这里没有SQL shell,因此可能会有轻微的语法问题):

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