Zeilen pro Woche

Meine Frage bezieht sich nicht (nur) auf die konkrete technische Umsetzung, sondern eher auf die generelle Machbarkeit, um herauszufinden, auf welchem Layer meiner Applikationen ich hierbei ansetzen kann.

Eine Tabelle mit einem Datums-Feld und weiteren (hier nicht relevanten) Feldern.

Nun möchte ich herausfinden, wieviele Einträge (bzw. Zeilen) durchschnittlich pro Woche existieren.

Dafür muss ich erstmal das Datum in Wochen (auch über Jahresgrenze hinaus) umrechnen.
Dann muss ich die Gesamtzeilenzahl durch die Anzahl verschiedener Wochen teilen.

Ungefähr so ist die Logik. Lässt sich dies bereits auf Ebenen von PostgreSQL umsetzen?

Das Ergebnis möchte ich dann später von verschiedenen Anwendungen (R & XeTeX, sowie eine Python-Anwendung) abgreifen. Ich möchte vermeiden, diese “Berechnung” von den beiden Anwendungen einzeln (also doppelt: R & Python) implementieren zu müssen.

pre-Kaffee - Fingerübung:

test=# create table moonkid as select s as id, (current_date + random() * 1000 * '1day'::interval)::date as datum from generate_series(1,250) s;
SELECT 250                                                                                                                                      
Time: 219,565 ms                                                                                                                                
test=*# select extract(year from datum)::text || '/' || extract(week from datum)::text, count(1) from moonkid group by 1 order by 1 limit 20;
 ?column? | count                                                                                                                            
----------+-------                                                                                                                           
 2015/10  |     2                                                                                                                            
 2015/11  |     1                                                                                                                            
 2015/13  |     1
 2015/14  |     3
 2015/15  |     4
 2015/16  |     2
 2015/17  |     3
 2015/18  |     3
 2015/19  |     2
 2015/20  |     2
 2015/21  |     1
 2015/22  |     1
 2015/23  |     1
 2015/24  |     2
 2015/26  |     1
 2015/29  |     2
 2015/30  |     2
 2015/31  |     1
 2015/33  |     2
 2015/34  |     1
(20 rows)

Time: 1,714 ms
test=*# select extract(year from datum)::text || '/' || extract(week from datum)::text, count(1) from moonkid group by 1 order by 1 desc limit 20;
 ?column? | count
----------+-------
 2017/9   |     2
 2017/8   |     2
 2017/7   |     3
 2017/6   |     4
 2017/5   |     1
 2017/40  |     1
 2017/39  |     5
 2017/38  |     1
 2017/37  |     1
 2017/36  |     2
 2017/34  |     4
 2017/33  |     3
 2017/32  |     2
 2017/31  |     3
 2017/30  |     2
 2017/3   |     1
 2017/29  |     3
 2017/28  |     3
 2017/27  |     2
 2017/26  |     2
(20 rows)

Time: 1,710 ms

Ach so, Du wolltest noch wissen, wie viele je woche im Durchschnitt:

test=*# select avg(count) from (select extract(year from datum)::text || '/' || extract(week from datum)::text, count(1) from moonkid group by 1) foo;
        avg
--------------------
 2.0833333333333333
(1 row)

Ui! Da werd ich mich mal druchfuxen und sicher noch mal Nachfragen.
Dickes Danke erstmal! :wink: