PostgreSQL早期版本的累积最小值
我正在使用PostgreSQL 8.2,这是我问这个问题的主要原因。我想在这个版本的PostgreSQL中获得一个列(命名为C),其中包含一些其他预排序列(命名为B)的累积最小值。因此,对于某些排序,C列的第n行应该是第1行到第n行中B值的最小值 在下例中,A列给出顺序,C列包含B列按该顺序的累积最小值:PostgreSQL早期版本的累积最小值,postgresql,Postgresql,我正在使用PostgreSQL 8.2,这是我问这个问题的主要原因。我想在这个版本的PostgreSQL中获得一个列(命名为C),其中包含一些其他预排序列(命名为B)的累积最小值。因此,对于某些排序,C列的第n行应该是第1行到第n行中B值的最小值 在下例中,A列给出顺序,C列包含B列按该顺序的累积最小值: A B C ------------ 1 5 5 2 4 4 3 6 4 4 5 4 5 3 3
A B C
------------
1 5 5
2 4 4
3 6 4
4 5 4
5 3 3
6 1 1
解释我想要什么的最简单方法可能是在以后的版本中,下一个查询的作用:
SELECT A , B, min (B) OVER(ORDER BY A) C FROM T;
但是8.2版当然没有窗口功能
我已经编写了一些plpgsql函数,可以在阵列上执行此操作。但要使用它,我必须使用我自己再次编写的聚合函数(该版本中没有内置的array\u agg)。这种方法不是很有效,虽然它在较小的表上工作得很好,但现在我需要在较大的表上使用它,它几乎无法使用
因此,我将非常感谢任何关于这个问题的替代、更有效的解决方案的建议
谢谢大家! 您可以使用这个简单的子选择:
SELECT a, b, (SELECT min(b) FROM t t1 WHERE t1.a <= t.a) AS c
FROM t
ORDER BY a;
但实际上,您应该升级到更新版本的PostgreSQL。8.2版在去年已经过时。没有更多的安全更新。还有这么多缺少的功能
CREATE INDEX t_a_b_idx ON t (a,b);