アイテムIDカラムでグループ化された設定期間にわたってローリング平均を生成しようとしています。 PostgreSQLグループ化ローリング平均
----------------------------------------------------
| 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 |
----------------------------------------------------
私は
answer to a previous question on rolling averagesを見つけたが、私はかなりによってどのようにグループの平均値を見つけ出すように見えることはできません。綿毛が取り除かで
はここで、テーブルといくつかのダミーデータの基本的なレイアウトですアイテムID。ほとんど私がダウンした道は統計が間違っていて終わってしまった。
ここに私の出発点があります。私はROW_NUMBER()の理解が不足していても問題を解決できないと感じています。
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;
ご協力いただければ幸いです。
"グループ化されたローリング平均"は非常に一般的です。あなたがしようとしていることを説明してください。サンプルデータと望ましい結果が得られます。 –