Tabelle mit Monat um Tage ergänzen

Mr. Robot

Fleissiger Benutzer
Beiträge
88
Hallo zusammen,

ich habe eine Tabelle folgender Form:

123.PNG

Möchte nun die Tabelle auf tagesebene erweitern und den monatlichen Wert gleichmäßig auf die Tage verteilen. Das heißt aus der Januar 2021 sollen 31 Datensätze werden mit jeweils den Einträgen 62/31 = 2.

Meine erste Überlegung ist ein Join mit einer Datumstabelle und erstellen einer zusätzlichen Spalte aber vielleicht geht es eleganter ohne eine Datumstabelle?

Danke.
 
Werbung:
Code:
test=*# select * from bla;
   monat    | wert
------------+------
 2021-01-01 |  123
 2021-02-01 |  456
 2021-03-01 |  678
(3 rows)

test=*# with dates as (select datum::date from generate_series((select min(monat) from bla),(select (max(monat) + '1month'::interval)::date from bla) - '1day'::interval, '1day') datum), tage as (select date_trunc('month', datum)::date monat, count(1) as anzahl from dates group by 1) select dates.datum, bla.wert, bla.wert / tage.anzahl as tageswert from dates left join bla on (date_trunc('month',dates.datum)=date_trunc('month',bla.monat)) left join tage on (tage.monat=date_trunc('month',bla.monat));

   datum    | wert |      tageswert     
------------+------+---------------------
 2021-01-01 |  123 |  3.9677419354838710
 2021-01-02 |  123 |  3.9677419354838710
 2021-01-03 |  123 |  3.9677419354838710
 2021-01-04 |  123 |  3.9677419354838710
 2021-01-05 |  123 |  3.9677419354838710
 2021-01-06 |  123 |  3.9677419354838710
 2021-01-07 |  123 |  3.9677419354838710
 2021-01-08 |  123 |  3.9677419354838710
 2021-01-09 |  123 |  3.9677419354838710
 2021-01-10 |  123 |  3.9677419354838710
 2021-01-11 |  123 |  3.9677419354838710
 2021-01-12 |  123 |  3.9677419354838710
 2021-01-13 |  123 |  3.9677419354838710
 2021-01-14 |  123 |  3.9677419354838710
 2021-01-15 |  123 |  3.9677419354838710
 2021-01-16 |  123 |  3.9677419354838710
 2021-01-17 |  123 |  3.9677419354838710
 2021-01-18 |  123 |  3.9677419354838710
 2021-01-19 |  123 |  3.9677419354838710
 2021-01-20 |  123 |  3.9677419354838710
 2021-01-21 |  123 |  3.9677419354838710
 2021-01-22 |  123 |  3.9677419354838710
 2021-01-23 |  123 |  3.9677419354838710
 2021-01-24 |  123 |  3.9677419354838710
 2021-01-25 |  123 |  3.9677419354838710
 2021-01-26 |  123 |  3.9677419354838710
 2021-01-27 |  123 |  3.9677419354838710
 2021-01-28 |  123 |  3.9677419354838710
 2021-01-29 |  123 |  3.9677419354838710
 2021-01-30 |  123 |  3.9677419354838710
 2021-01-31 |  123 |  3.9677419354838710
 2021-02-01 |  456 | 16.2857142857142857
 2021-02-02 |  456 | 16.2857142857142857
 2021-02-03 |  456 | 16.2857142857142857
 2021-02-04 |  456 | 16.2857142857142857
 2021-02-05 |  456 | 16.2857142857142857
 2021-02-06 |  456 | 16.2857142857142857
 2021-02-07 |  456 | 16.2857142857142857
 2021-02-08 |  456 | 16.2857142857142857
 2021-02-09 |  456 | 16.2857142857142857
 2021-02-10 |  456 | 16.2857142857142857
 2021-02-11 |  456 | 16.2857142857142857
 2021-02-12 |  456 | 16.2857142857142857
 2021-02-13 |  456 | 16.2857142857142857
 2021-02-14 |  456 | 16.2857142857142857
 2021-02-15 |  456 | 16.2857142857142857
 2021-02-16 |  456 | 16.2857142857142857
 2021-02-17 |  456 | 16.2857142857142857
 2021-02-18 |  456 | 16.2857142857142857
 2021-02-19 |  456 | 16.2857142857142857
 2021-02-20 |  456 | 16.2857142857142857
 2021-02-21 |  456 | 16.2857142857142857
 2021-02-22 |  456 | 16.2857142857142857
 2021-02-23 |  456 | 16.2857142857142857
 2021-02-24 |  456 | 16.2857142857142857
 2021-02-25 |  456 | 16.2857142857142857
 2021-02-26 |  456 | 16.2857142857142857
 2021-02-27 |  456 | 16.2857142857142857
 2021-02-28 |  456 | 16.2857142857142857
 2021-03-01 |  678 | 21.8709677419354839
 2021-03-02 |  678 | 21.8709677419354839
 2021-03-03 |  678 | 21.8709677419354839
 2021-03-04 |  678 | 21.8709677419354839
 2021-03-05 |  678 | 21.8709677419354839
 2021-03-06 |  678 | 21.8709677419354839
 2021-03-07 |  678 | 21.8709677419354839
 2021-03-08 |  678 | 21.8709677419354839
 2021-03-09 |  678 | 21.8709677419354839
 2021-03-10 |  678 | 21.8709677419354839
 2021-03-11 |  678 | 21.8709677419354839
 2021-03-12 |  678 | 21.8709677419354839
 2021-03-13 |  678 | 21.8709677419354839
 2021-03-14 |  678 | 21.8709677419354839
 2021-03-15 |  678 | 21.8709677419354839
 2021-03-16 |  678 | 21.8709677419354839
 2021-03-17 |  678 | 21.8709677419354839
 2021-03-18 |  678 | 21.8709677419354839
 2021-03-19 |  678 | 21.8709677419354839
 2021-03-20 |  678 | 21.8709677419354839
 2021-03-21 |  678 | 21.8709677419354839
 2021-03-22 |  678 | 21.8709677419354839
 2021-03-23 |  678 | 21.8709677419354839
 2021-03-24 |  678 | 21.8709677419354839
 2021-03-25 |  678 | 21.8709677419354839
 2021-03-26 |  678 | 21.8709677419354839
 2021-03-27 |  678 | 21.8709677419354839
 2021-03-28 |  678 | 21.8709677419354839
 2021-03-29 |  678 | 21.8709677419354839
 2021-03-30 |  678 | 21.8709677419354839
 2021-03-31 |  678 | 21.8709677419354839
(90 rows)

so vielleicht?
 
Hab einen Weg gefunden...
Die Bla Tabelle INNER JOIN ON Datum und Jahr
und mit Hilfe der Window Function: wert / COUNT(wert) OVER (PARTITION BY datum) AS tageswert

finde ich etwas einfacher. in deiner tabelle werden auch jahre nicht berücksichtigt.
 
Werbung:
Zurück
Oben