Совокупный мин на более ранних версиях PostgreSQL - PullRequest
0 голосов
/ 22 марта 2012

Я использую PostgreSQL 8.2 , что является основной причиной, по которой я задаю этот вопрос.Я хочу получить в этой версии PostgreSQL столбец (пусть назовем его C) с кумулятивным минимумом для некоторого другого предварительно упорядоченного столбца (пусть назовем его B).Таким образом, в n-й строке столбца C должно быть минимум значений B в строках с 1 по n для некоторого порядка.

В приведенном ниже примере столбец A дает порядок, а столбец C содержит совокупный минимум для столбца B в этом порядке:

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, конечно, не имеет окнаfunctions.

Я написал несколько функций plpgsql, которые делают это на массивах.Но чтобы использовать это, я должен использовать array_agg агрегатную функцию, которую я снова написал сам (в этой версии нет встроенного array_agg).Этот подход не очень эффективен, и хотя он хорошо работал на меньших столах, он стал почти непригодным для использования теперь, когда мне нужно использовать его на больших столах.

Так что я был бы очень благодарен за любые предложения альтернативных, более эффективныхрешения этой проблемы.

Спасибо!

1 Ответ

1 голос
/ 22 марта 2012

Ну, вы можете использовать этот простой подвыбор:

SELECT a, b, (SELECT min(b) FROM t t1 WHERE t1.a <= t.a) AS c
FROM   t
ORDER  BY a;

Но я сомневаюсь, что для больших таблиц это будет быстрее, чем функция plpgsql.Может быть, вы можете показать нам свою функцию.Там может быть место для улучшения.

Чтобы это было быстро, у вас должен быть многостолбцовый индекс, например:

CREATE INDEX t_a_b_idx ON t (a,b);

Но на самом деле вам следует обновить его до более поздней версииPostgreSQL.Версия 8.2 достигла конца жизни в прошлом году.Больше никаких обновлений безопасности.И так много недостающих функций ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...