Closed enkore closed 6 years ago
Ok, stellt sich raus, dass das eigentlich ganz einfach ist. Man baut sich halt das Datum aus (year, doy) zusammen und konvertier das wieder zum Wochentag zurück.
func.to_char(
func.cast(func.concat(DailyStats.year, '-01-01'), Date) +
func.cast(func.concat(DailyStats.day_of_year, ' days'), Interval),
'ID')
An den APIs hat sich natürlich nichts geändert.
active_users OTOH kann man nicht einfach aufsummieren (:D)
Und eigentlich ist auch AVG(AVG(x)) technisch nicht wirklich korrekt, wenn die Grundmengen von x stark unterschiedlich groß sind.
active_users ist jetzt zwar richtig, aber die Lösug ist irgendwie ziemlich hässlich und eher langsam. Außerdem müsste man das nochmal mittels eines Subqueries umformulieren, weil die Art und Weise (UNNEST()), wie der Query die Anzahl der eindeutigen UIDs pro aggregierter Zeile erfasst effektiv ein Join/Kreuzprodukt der Tabelle mit den einzelnen Array-Zeilen bedeutet, weswegen gerade alle anderen Statistiken viel zu hoch sind (und das ist auch der Grund, warum das langsam ist: Postgres verarbeitet da statt COUNT(Tabelle) COUNT(Tabelle) * GESAMTLÄNGE(ALLER ARRAYS) Zeilen).
Ich würd die Statistik allerdings ungern weglassen, weil sie eine der interessanteren ist.