2009-05-21 55 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