Мне нужно выполнить сложную групповую обработку, например здесь . Я получаю несколько строк из сложного запроса, набор строк выглядит так:
key val
-------
foo 1
foo 2
foo 3
bar 10
bar 15
baz 22
baz 44
...
А вот псевдокод, который я хочу реализовать в plpgsql:
result = new array()
group = new array()
current_key = null
for (record in (select * from superComplexQuery())) {
if (current_key == null) {
current_key = record.key
}
if (current_key != record.key) {
result.add(processRows(group))
group.clear()
current_user = record.key
}
group.add(record)
}
if (group.size() > 0) {
result.add(processRows(group))
}
return result
Т.е., мы должны обработать 3 строки "foo", затем 2 строки "bar", затем 2 "строки baz" и т. Д. И результат каждого processRows добавляется в результирующую коллекцию.
Может быть, я должен использовать другой подход, но я не знаю, что это должно быть.
РЕДАКТИРОВАТЬ: processRows должен выводить запись. Таким образом, результатом всей процедуры будет набор строк, где каждая строка является результатом processRows (group). Один пример такого вычисления приведен в первом предложении этого вопроса: Выбор положительного совокупного значения и игнорирование отрицательного в Postgres SQL , то есть вычисление включает в себя некоторую итерацию и агрегирование с некоторыми сложными правилами.