Ich versuche, gleitende Durchschnitte über festgelegte Zeiträume zu generieren, die nach einer Artikel-ID-Spalte gruppiert sind.PostgreSQL Grouped Rolling Averages
Hier ist das grundlegende Layout der Tabelle und einige Dummy-Daten, mit der Flaum gezupft:
----------------------------------------------------
| id | itemid | isup | logged |
----------------------------------------------------
| 1 | 1 | true | 2017-03-23 12:55:00 |
| 2 | 1 | false | 2017-03-23 12:57:00 |
| 3 | 1 | true | 2017-03-23 13:07:00 |
| 4 | 1 | false | 2017-03-23 13:09:00 |
| 5 | 1 | true | 2017-03-23 13:50:00 |
| 6 | 2 | false | 2017-03-23 12:55:00 |
| 7 | 2 | true | 2017-03-23 14:00:00 |
| 8 | 2 | false | 2017-03-23 14:03:00 |
----------------------------------------------------
ich eine answer to a previous question on rolling averages gefunden, aber ich kann nicht ganz scheinen, wie zu einer Gruppe durch die die Mittelwerte, um herauszufinden, Artikel Identifikationsnummer; so ziemlich alle Wege, die ich hinuntergegangen bin, sind mit der Statistik ausgegangen, die völlig falsch ist.
Hier ist mein Ausgangspunkt - ich habe das Gefühl, dass mein Mangel an Verständnis von ROW_NUMBER() OVER nicht hilft.
SELECT id, itemid, AVG(isup)
OVER (PARTITION BY groupnr ORDER BY logged) AS averagehour
FROM (
SELECT id, itemid, isup, logged, intervalgroup,
itemid - ROW_NUMBER() OVER (
partition by intervalgroup ORDER BY logged) AS groupnr
FROM (
SELECT id, itemid, logged,
CASE WHEN isup = TRUE THEN 1 ELSE 0 END AS isup,
'epoch'::TIMESTAMP + '3600 seconds'::INTERVAL *
(EXTRACT(EPOCH FROM logged)::INT4/3600) AS intervalgroup
FROM uplog
) alias_inner
) alias_outer
ORDER BY logged;
Jede Hilfe würde sehr geschätzt werden.
"Gruppierte Rollendurchschnitte" ist sehr allgemein. Bitte beschreiben Sie, was Sie versuchen zu tun. Beispieldaten und gewünschte Ergebnisse helfen. –