【发布时间】:2015-07-31 05:24:01
【问题描述】:
考虑以下数据:
category | index | value
-------------------------
cat 1 | 1 | 2
cat 1 | 2 | 3
cat 1 | 3 |
cat 1 | 4 | 1
cat 2 | 1 | 5
cat 2 | 2 |
cat 2 | 3 |
cat 2 | 4 | 6
cat 3 | 1 |
cat 3 | 2 |
cat 3 | 3 | 2
cat 3 | 4 | 1
我正在尝试填补空洞,以便 hole = avg(value) 在一个类别中具有非空值的 2 个最近邻居:
category | index | value
-------------------------
cat 1 | 1 | 2
cat 1 | 2 | 3
cat 1 | 3 | 2*
cat 1 | 4 | 1
cat 2 | 1 | 5
cat 2 | 2 | 5.5*
cat 2 | 3 | 5.5*
cat 2 | 4 | 6
cat 3 | 1 | 1.5*
cat 3 | 2 | 1.5*
cat 3 | 3 | 2
cat 3 | 4 | 1
我一直在玩窗口函数,我很确定它可以实现,但解决方案却让我望而却步。
有什么想法吗?
【问题讨论】:
-
为什么
2和6之间的值平均为1.5而不是4? -
另外,你必须只使用 Postgres 来解决这个问题吗?我很难在像 R 或 Matlab 这样的工具中做到这一点,这两种工具都是为这类事情设计的。
-
'6' 不在 'cat 3' 中。在 cat 3 中,最近的邻居是 2 和 1。
-
只感谢postgresql。
标签: sql postgresql window-functions