Postgresql用sql将相邻数据平均到新表中

时间:2017-11-21 14:47:35

标签: sql postgresql

这是数据结构。 date是唯一的,但可能会丢失(意味着跳转日期但不是NULL)并且不正常。如果记录数是奇数,则只省略最后一条记录。

date       | value | value2
-----------+-------+--------
2017-10-11 |    10 |    0.2
2017-10-13 |    22 |    0.3
2017-10-12 |     6 |    0.0
2017-10-14 |    20 |    0.6
         ...

我希望使用记录到合并值的平均值将最近的两条记录与新值合并。仅使用 SQL

期待结果。

date       | value | value2
-----------+-------+--------
2017-10-11 |     8 |    0.1
2017-10-13 |    21 |   0.45
         ...

2017-10-11 merged 2017-10-11 and 2017-10-12, i.e. value = AVG(10,6) = 8
2017-10-13 merged 2017-10-13 and 2017-10-14, i.e. value = AVG(22,20) = 21

1 个答案:

答案 0 :(得分:2)

select min(date), avg(value), avg(value2)
  from (
    select *, (row_number() over(order by date)-1)/2 grp
      from Table1
  ) X
group by grp

sqlfiddle.com上的演示