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