【发布时间】:2019-03-15 04:58:15
【问题描述】:
我有一张表,其中存储了每件商品的每日价格。如果价格尚未更新,则表示当天没有该商品的记录。
我需要编写一个查询来检索每件商品的最新价格,回溯窗口为当前行日期后 10 天,否则返回 NULL。我正在考虑使用RANGE BETWEEN INTERVAL 语句来实现这一目标。比如:
SELECT
DATE(datetime),
item_id,
LAST(price) OVER(
PARTITION BY item_id
ORDER BY datetime DESC
RANGE BETWEEN INTERVAL '10 DAYS' AND CURRENT ROW
) AS most_recent_price_within_last_10days
FROM ...
GROUP BY
date,
item_id,
price
不幸的是,这个查询引发了一个错误:
LINE 20: RANGE BETWEEN INTERVAL '10 DAY' PRECEDING AND CURRENT ROW
^
我看到一篇旧博客文章说在 Postgres 中无法进行这样的操作。这仍然准确吗?
【问题讨论】:
-
您可以使用此 WHERE 子句获取最后 X 天的行:WHERE your_date > NOW() - INTERVAL '10 days'
-
能否提供一些实际数据和预期输出?
-
这个选项是在 Postgres 11 中引入的
-
不幸的是,我仅限于 GCP 中的 Postgres 9.6。
标签: sql postgresql range window-functions