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

Crie uma lista de todos os dias por mês e divida o valor igualmente para cada dia


demo:db<>fiddle
SELECT
    gs::date,
    costs /  COUNT(*) OVER (PARTITION BY entry_date)    -- 3
FROM costs,
    generate_series(                                    -- 2
        entry_date,
        entry_date + interval '1 month - 1 day',        -- 1
        interval '1 day'
    ) gs
  1. Cálculo do último dia do mês (adicione um mês ao primeiro dia do mês para obter o primeiro dia do mês seguinte, subtraia um dia dele)
  2. Gere uma série de datas do início ao fim de um mês
  3. A junção dos seus dados com a série gerada já duplicou os valores de custos, que só precisam ser divididos pela contagem de dias de cada mês, que é o que COUNT() função de janela faz aqui