PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Tabela de consulta com array_agg/median de TODAS as posições anteriores, LAST_10, LAST_50, excluindo a posição atual


Postgres não tem uma função agregada embutida para MEDIAN . Mas você pode criar um usando o snippet de função disponível em Postgres wiki . Este trecho também faz parte da biblioteca definida pelo usuário ulib_agg .

Uma vez criado, você pode usá-lo como qualquer função agregada como SUM ou STRING_AGG com window semelhante especificação. O Postgres oferece a opção de especificar várias window definições para funções agregadas separadas por uma vírgula.

Então, para obter um MEDIAN dos 20 registros anteriores, sua janela pode ser definida como nesta consulta.
SELECT 
j.* ,  array_agg(position) over w as previous_positions,
       median(position)    over w_20 as med_20
  FROM jockeys j
WINDOW w as
(  partition by name ORDER BY id rows between 
     unbounded preceding and 1 preceding
     ),
     w_20 as
     (  partition by name ORDER BY id rows between 
           20 preceding and 1 preceding
     )

Além disso, você pode aplicar ROUND função se você quiser truncar dígitos decimais.

DEMO