PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Créer une liste de tous les jours par mois et diviser la valeur de manière égale pour chaque jour

démo :db<>violon

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. Calcul du dernier jour du mois (ajoutez un mois au premier du mois pour obtenir le premier jour du mois suivant, soustrayez-en un jour)
  2. Générer une série de dates du début à la fin d'un mois
  3. La jointure de vos données avec la série générée a déjà dupliqué les valeurs de coûts, qui doivent seulement être divisées par le nombre de jours de chaque mois, ce que le COUNT() la fonction de fenêtre fait ici