我想在 252 天的滾動周期內計算滾動平均值,但前提是表中有 252 天的資料可用,否則行的值為空。目前我正在使用這個查詢:
SELECT datestamp, symbol, avg(close) OVER (PARTITION BY symbol ORDER BY datestamp ROWS BETWEEN 251 PRECEDING AND CURRENT ROW) FROM daily_prices。
如果 252 天資料不可用,它也會給出平均值。我想通過定義 min_period 值來獲得 Pandas 滾動函式的結果。
uj5u.com熱心網友回復:
“我想計算 252 天滾動周期內的滾動平均值”
該子句ROWS BETWEEN 251 PRECEDING AND CURRENT ROW不是指一段時間,而是根據該ORDER BY datestamp子句,視窗中的行數以及當前行之前的行數。
我建議您對視窗函式使用稍微不同的解決方案,以實作一段時間:
SELECT datestamp, symbol, avg(close) OVER (PARTITION BY symbol ORDER BY datestamp RANGE BETWEEN '251 days' PRECEDING AND CURRENT ROW) FROM daily_prices
然后我不明白在哪種情況下你想要一個空值。在當前行的視窗中,您將至少擁有當前行,因此 avg() 不能為空。
uj5u.com熱心網友回復:
只需對同一視窗進行計數并使用它來修改您的結果。我使用了一個命名視窗來避免重復指定同一個視窗。
with daily_prices as (select 1 as symbol, 5 as close, t as datestamp from generate_series(now()-interval '1 year',now(),interval '1 day') f(t))
SELECT
datestamp,
symbol,
case when count(close) OVER w = 252 then
avg(close) OVER w
end
FROM daily_prices
window w as (PARTITION BY symbol ORDER BY datestamp ROWS BETWEEN 251 PRECEDING AND CURRENT ROW);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/366803.html
