2017-09-01 3 views
0

SO J'ai une table qui a des champs: enter image description here Ainsi, cette valeur - 1023 et QualityCode - 53 peuvent se produire à des moments aléatoires, et pour chaque MeterNum il y a environ 24 valeurs, le ROW_ID incrémente jusqu'à 24 et commence à partir de 1 pour le nouveau MeterNum, je dois remplacer le 1023 avec une moyenne de 46 et 21 (row_num 19 & 21) sinon ajouter une autre alias l'instruction select. J'essayais de trouver une déclaration de cas, mais je ne suis pas en mesure de faire la moyenne des valeurs, quelqu'un peut-il m'aider?comment les valeurs moyennes consécutives dans un enregistrement qui répond à une condition à l'aide des déclarations de cas dans SQL

+4

Veuillez retourner à la table de texte. Si quelqu'un veut répliquer vos données pour les tester, votre photo de la table est inutile. Il suffit de mettre en retrait votre table de texte avec 4 espaces sur chaque ligne et il apparaîtra comme écrit (voir ma modification avant votre dernière modification) – JNevill

Répondre

3

Vous pouvez utiliser Lag et Lead pour faire ce genre de logique à l'intérieur d'une instruction CASE:

UPDATE TABLE 
SET VALUE = CASE 
     WHEN VALUE = 1023 
      THEN (
        Lag(Value, 1) OVER (PARTITION BY meternum ORDER BY row_id ASC) 
        + Lead(Value, 1) OVER (PARTITION BY meternum ORDER BY row_id ASC) 
       )/2 
     ELSE VALUE 
     END 

Lag et le plomb sont fonctions de la fenêtre. Lag remontera le nombre d'enregistrements spécifiés (nous revenons ici 1) et saisir une valeur. Il détermine quels enregistrements par la clause PARTITION BY (ici seulement retourner les enregistrements avec le même MeterNum) et détermine l'ordre de ces enregistrements par la clause ORDER BY (en les classant ici par votre row_id).

+0

Merci beaucoup, cela fonctionne parfaitement. Il y a un problème cependant, si la valeur = 1023 est cohérente pour plus de 2 intervalles, alors je suis supposé prendre la première et la dernière valeur pertinente prendre la moyenne et l'appliquer pour ces 1023 valeurs multiples, Ex: les valeurs sont 24,1023 , 1023, 1023, 32 alors je suis supposé prendre la moyenne de 24 et 32 ​​et appliquer cette valeur pour toutes les trois 1023 valeurs. Pouvez-vous suggérer quelque chose pour cela? @JNevill – user1960217