首页 > 解决方案 > 获取在过去 6 个月内价格上涨 5% 的符号

问题描述

我有以下两张每天跟踪股票价格的表格

CREATE TABLE "public"."security" (
    "symbol" text NOT NULL,
    "security" text NOT NULL
    CONSTRAINT "security_pk" PRIMARY KEY ("symbol")
) 

以及下表每天跟踪证券价格

CREATE TABLE "public"."security_data" (
    "ticker" text NOT NULL,
    "time" date NOT NULL,
    "low" numeric NOT NULL,
    "high" numeric NOT NULL,
    "open" numeric NOT NULL,
    "close" numeric NOT NULL,
    "volume" double precision,
    CONSTRAINT "security_data_pkey" PRIMARY KEY ("ticker", "time"),
    CONSTRAINT "security_data_ticker_fkey" FOREIGN KEY (ticker) REFERENCES security(symbol) ON UPDATE CASCADE ON DELETE CASCADE NOT DEFERRABLE
)

我想提出一个 SQL 查询,该查询返回上周平均价格比过去 6 个月平均价格高出 5% 以上的股票的“符号”列表。我想不出编写此查询的最佳方法。是否可以在一个查询中编写此内容?如果有怎么办?

标签: sqlpostgresqldatetimeaverage

解决方案


您可以使用聚合。假设您close的列代表价格,您可以执行以下操作:

select ticker
from security_date
where time > current_date - '6 month'::interval
group by ticker
having avg(close) filter(where time > current_date - '1 week'::interval) 
    > 1.05 * avg(close)

看起来您不需要“实时”表来获得所需的结果。


推荐阅读