PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Crea un elenco di tutti i giorni del mese e dividi il valore equamente per ogni giorno

demo:db<>violino

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. Calcolo dell'ultimo giorno del mese (aggiungi un mese al primo del mese per ottenere il primo giorno del mese successivo, sottrai un giorno da esso)
  2. Genera una serie di date dall'inizio alla fine di un mese
  3. L'unione dei tuoi dati con le serie generate ha già duplicato i valori dei costi, che devono solo essere divisi per il conteggio dei giorni di ogni mese, che è il COUNT() la funzione finestra fa qui