PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Erstellen Sie eine Liste aller Tage pro Monat und teilen Sie den Wert gleichmäßig auf jeden Tag auf

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. Berechnung des letzten Tages des Monats (addieren Sie einen Monat zum ersten des Monats, um den ersten Tag des nächsten Monats zu erhalten, subtrahieren Sie einen Tag davon)
  2. Generieren Sie eine Datumsreihe vom Anfang bis zum Ende eines Monats
  3. Die Zusammenführung Ihrer Daten mit der generierten Reihe hat bereits die Kostenwerte dupliziert, die nur durch die Anzahl der Tage jedes Monats geteilt werden müssen, was den COUNT() ergibt Fensterfunktion tut hier