Estoy tratando de crear una función en postgresql que devuelva un conjunto de fechas entre dos fechas con un cierto intervalo. Por ejemplo, si paso estos dos parámetros de fecha como most_recent_day = 2020-01-10 y mininum_day = 2020-01-01 y este parámetro de intervalo n_day_group_interval = 5 , la función devolverá el siguiente conjunto:
2020-01-10 2020-01-08 2020-01-06 2020-01-04 2020-01-02 El siguiente fue mi intento que da un syntax error at or near "end" . Gracias por tu ayuda.
create function get_n_day_group_dates(most_recent_day date, minimum_day date, n_day_group_interval varchar) returns table ( n_day_group_dates date ) as $body$ begin return query SELECT date_trunc('day'::text, dd.dd)::date AS n_day_group_dates FROM LATERAL generate_series(most_recent_day, minimum_day, '-'||n_day_group_interval||' day'::interval) dd(dd) end; $body$ language plpgsql;Estás complicando demasiado las cosas. No se requiere LATERAL y date_trunc('day', ..) es lo mismo que lanzar hasta la date .
Para crear un intervalo basado en una variable, la forma más fácil es usar make_interval()
create function get_n_day_group_dates(most_recent_day date, minimum_day date, n_day_group_interval varchar) returns table (n_day_group_dates date) as $body$ SELECT g.dt::date FROM generate_series(most_recent_day, minimum_day, make_interval(days => n_day_group_interval) as g(dt); $body$ language sql;