2009-05-21 5 views
3

J'ai une table avec plusieurs readings_miu_id ayant chacune plusieurs lectures RSSI (RSSI est aussi le nom du champ). Donc, j'ai actuellement une fiche technique, avec beaucoup de colonnes, mais les deux plus pertinentes à cette conversation ressemble à quelque chose comme ceci:Utilisation de Avg() avec la mise à jour SQL

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

et ainsi de suite. Mon plan initial était de changer la valeur de RSSI pour chaque enregistrement ayant le même readings_miu_id avec le RSSI moyen pour readings_miu_id (qui devrait être le même que ci-dessus sauf que les RSSI individuels seront remplacés par le RSSI moyen pour ce miu), et puis tirez seulement un enregistrement pour chaque readings_miu_id distinct (que je suis assez sûr que je peux faire avec l'instruction select select top 1). Cependant, j'ai des problèmes pour trouver la première partie. Les instructions SQL j'ai essayé qui semblent comme ils devraient être proches sont:

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

et

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; 

Aide s'il vous plaît!

+2

Retiré pour supprimer les balises "avg" et "update". Il n'y a pas vraiment de catégorie IMO, et avg a également été utilisé pour le logiciel anti-virus dans un autre post. N'hésitez pas à les remettre si quelqu'un n'est pas d'accord. –

+1

Alors, est-ce que quelqu'un sait pourquoi je suis abattu ici? – Bryan

+1

@Brian, je ne comprends vraiment pas ce qui ne va pas avec les gens sur StackOverflow aujourd'hui - j'ai vu beaucoup de downvotes bizarres. C'est une bonne question, bien écrite, bien formatée. Je n'arrive pas à comprendre pourquoi ça a été downvoted. Je l'ai upvoted pour vous. –

Répondre

0

Vous ne savez pas pourquoi vous souhaitez mettre à jour les enregistrements.

Si vous voulez juste une lecture avg vous pouvez le faire:

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

J'ai besoin de toutes les informations de toutes les requêtes pour être stockées en continu dans les tables car toutes les informations de la table sont ce dont j'ai besoin, pas seulement l'avg (RSSI) et une fois les données visualisées avec une zone de liste qui utilise une table comme source. Et puisque c'est un projet que j'ai hérité de mon prédécesseur, je suis obligé de faire les choses de la même manière – Bryan

0

S'il vous plaît voir ce question, où un scénario similaire est discuté.

La requête que vous recherchez est quelque chose comme ça (je n'ai pas une coquille SQL ici, donc il peut y avoir de légères problèmes de syntaxe):

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