我有一個 SQL 查詢問題,我很確定它可以用視窗函式解決,但我不明白。所以也許有人可以給我一個正確的方向。
我有一個示例表:
| 欄位 1 | 欄位 2 | 年 | 月 | 指數 |
|---|---|---|---|---|
| 某事1 | 某事2 | 2020年 | 1 | 10.2 |
| 某事1 | 某事2 | 2020年 | 2 | 13.4 |
| 某事1 | 某事2 | 2020年 | 3 | 12.6 |
我做了一個db<>fiddle來更好地展示給你看。
我想添加一列 (kpi_yr_avg),其中計算(該記錄的)年份的平均值,但僅針對該資料記錄的該年的實際和前幾個月。
例如:
| 欄位 1 | 欄位 2 | 年 | 月 | 指數 | kpi_yr_avg |
|---|---|---|---|---|---|
| 某事1 | 某事2 | 2020年 | 1 | 10.2 | 10.2 |
| 某事1 | 某事2 | 2020年 | 2 | 13.4 | 11.8 |
| 某事1 | 某事2 | 2020年 | 3 | 12.7 | 12.1 |
我的意思是:在 1 月,平均值僅使用 1 月值計算。2 月的平均值使用 1 月和 febraury 值計算。等等。
我正在使用的真實表在 field1 和 field 2 中有不同的條目,包括自 2018 年以來的月份。
如果有人能指出我正確的方向,那就太好了。
uj5u.com熱心網友回復:
SELECT T.FIELD1,T.FIELD2,T.YEAR,T.MONTH,T.KPI,
AVG(T.KPI)OVER(PARTITION BY T.FIELD1,T.FIELD2,T.YEAR ORDER BY T.MONTH ASC)AS RUN_AVG
FROM test1 AS T ORDER BY T.field1, T.field2, T.year, T.month;
請您試試上面的查詢是否適合您
uj5u.com熱心網友回復:
使用帶移動平均線的窗函式
-- PostgreSQL(v11)
SELECT *
, AVG(kpi) OVER (PARTITION BY field1, field2, year ORDER BY month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) kpi_yr_avg
FROM test1
請從網址https://dbfiddle.uk/?rdbms=postgres_12&fiddle=1db8f0f234d0103120876cd95d8f303b查看
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/331622.html
標籤:sql PostgreSQL
上一篇:具有按日期分組的過濾值和總數
下一篇:從對話中選擇*[陣列]
