2017-09-01 68 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