获取过去 6 个月内价格上涨 5% 的符号

Get symbols that have had their price increase within the past 6 month by 5 percent

我有以下两个 table 每天跟踪股票价格

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

和以下 table 每天跟踪证券价格

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 查询 returns 过去一周平均价格比平均价格高 5% 以上的股票的“符号”列表过去 6 个月的价格。我想不出编写此查询的最佳方式。是否可以在一个查询中写这个?如果有怎么办?

您可以使用聚合。假设你的列 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)

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