Postgresql使用sql将相邻数据平均化到新表中
下面是数据结构<代码>日期是唯一的,但可能丢失(表示跳转日期,但不为空),并且顺序不正确。如果记录数为奇数,则忽略最后一条记录Postgresql使用sql将相邻数据平均化到新表中,sql,postgresql,Sql,Postgresql,下面是数据结构日期是唯一的,但可能丢失(表示跳转日期,但不为空),并且顺序不正确。如果记录数为奇数,则忽略最后一条记录 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 ... 我希望使用要合
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
演示
演示这里的逻辑是什么?你试过什么?如果缺少日期怎么办?@VamsiPrabhala我不确定postgresql是否能够在没有其他语言帮助的情况下进行这种合并和平均。@VamsiPrabhala可能会缺少日期和无序,但它们是唯一的。如果表中没有日期“2017-10-12”,那么“2017-10-11”必须与“2017-10-13”合并?如果记录的数量是奇数怎么办?@Mike Yes。在这种情况下,如果没有2017-10-12,2017-10-11必须与2017-10-13合并。如果是奇数记录,只需省略最后一条记录。这里的逻辑是什么?你试过什么?如果缺少日期怎么办?@VamsiPrabhala我不确定postgresql是否能够在没有其他语言帮助的情况下进行这种合并和平均。@VamsiPrabhala可能会缺少日期和无序,但它们是唯一的。如果表中没有日期“2017-10-12”,那么“2017-10-11”必须与“2017-10-13”合并?如果记录的数量是奇数怎么办?@Mike Yes。在这种情况下,如果没有2017-10-12,2017-10-11必须与2017-10-13合并。如果是奇数记录,只需省略最后一条记录。这太棒了。这太棒了
select min(date), avg(value), avg(value2)
from (
select *, (row_number() over(order by date)-1)/2 grp
from Table1
) X
group by grp