2009-05-21 38 views
3

我有一个表与多个readings_miu_id的每个与多个RSSI读数(RSSI也是字段的名称)。所以,我目前有一个数据表,有很多列,但这个对话的两个相关的看起来像这样:使用平均()与SQL更新

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; 

请帮助!

+2

重新标记以移除“avg”和“update”标记。这两者都不是真正的IMO类别,在另一篇文章中,avg也被用于反病毒软件。如果有人不同意,欢迎随时回复。 – 2009-05-21 16:36:32

+1

因此,有谁知道我为什么在这里投票? – Bryan 2009-06-12 18:45:51

回答

0

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

如果你只想得到一个平均的阅读,你可以这样做:

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

请参阅本question,在类似的情况进行了讨论。

你正在寻找的查询是这样的(我没有一个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