2017-09-01 69 views
0

,所以我必須具有字段的表: enter image description here 因此,該值 - 1023 QualityCode - 53可以發生在隨機時間,併爲每個MeterNum都有大約24個值,ROW_ID增加到24,然後從1開始新的MeterNum,我需要用平均值46和21替換1023(row_num 19 & 21),如果沒有至少添加另一個別名列選擇語句。我試圖拿出案例陳述,但我無法平均價值,有人可以幫助這一點。如何使用case語句在SQL中符合條件的記錄平均連續值

+4

請回到漂亮的文字列表。如果任何人想要複製數據以進行測試以作出答案,則表格的圖片是無用的。只需在每行上用4個空格縮進文本列表,它將以書面形式顯示(請參閱我的編輯,然後再上一次編輯) – JNevill

回答

3

您可以使用LagLead做這樣的邏輯的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 

滯後和鉛的窗口功能。滯後將返回指定的記錄數(這裏我們回去1)並獲取一個值。它通過PARTITION BY子句確定哪些記錄(這裏只返回具有相同的MeterNum的記錄),並通過ORDER BY子句(通過row_id在這裏排序)確定這些記錄的順序。

+0

非常感謝,完美無缺。但有一個問題,如果值= 1023的值超過2個時間間隔一致,那麼我應該將第一個和最後一個相關值取平均值,並將其應用於多個1023值,例如: Ex:值爲24,1023 ,1023,1023,32,那麼我應該採用24和32的平均值,並將這個值應用於所有三個1023值。 你能爲此提出任何建議嗎? @JNevill – user1960217