2014-02-04 4 views
2

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

Ищете что-то вроде select sum(col1) as a, last_n(col2, 5, created_date) as b from ... '

b затем будет массив из 5 элементов.

+0

Пожалуйста, добавьте свою версию Postgres. –

+0

Использование Postgres 9.3 – Bradford

+1

Звучит скорее как работа для оконной функции или подзапроса. Комбинированная функция PL/PgSQL для этого задания не будет слишком сложной, но она будет очень неэффективной, поскольку она будет создавать и уничтожать множество массивов, поскольку массивы неизменяемы на уровне SQL. Чтобы сделать его эффективным, вам нужно написать функцию на C, где вы можете мутировать массив состояний temp state, в этот момент вы обнаружите «радость» API-массива PostgreSQL C. –

ответ

2

Вы можете использовать только использовать коррелированы подзапрос:

SELECT sum(col1) as a 
     ,ARRAY(
      SELECT col2 
      FROM tbl t2 
      ORDER BY t2.created_date DESC 
      LIMIT 5) AS b 
FROM tbl t1; 
Смежные вопросы