比方說,我有如下表:PostgreSQL - 如何創建具有條件的窗口框架?
CREATE TABLE stock_prices (
stock TEXT NOT NULL,
date DATE NOT NULL,
price REAL NOT NULL,
UNIQUE (stock, date)
);
我想計算每一天,每一個股票的最高價格在之前3個月的窗口。
我不能做一個簡單的自我加入date - INTERVAL(3 'MONTH')
因爲我的stock_price
表有一些節假日和週末的「漏洞」。同樣一個天真的窗口也不起作用:
SELECT
stock,
date,
LAST_VALUE(price) OVER (PARTITION BY stock ORDER BY date ROWS 90 PRECEDING)
FROM stock_prices
我幾乎想要一個窗口框架與基於當前行的條件。 PostgreSQL有可能嗎?
一個解決方案是使用'generate_series()'生成額外的行。 –
非問題:如果日期範圍內有*孔*,那麼*孔*不能包含最高價格。 – joop
已經在dba.se上討論過:[使用窗口函數的日期範圍滾動和](http://dba.stackexchange.com/q/114403/57105)。 dba.se中的問題使用SQL Server,但最新的Postgres和最新的SQL Server具有與Window函數相關的一組相同功能,因此可以將最小的更改應用於Postgres。它們都不支持'RANGE'窗口框架,這在這個問題中很重要。可以使用子查詢,也可以用@klin顯示的日期填充日期。 –