获取过去 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 来获得您想要的结果。
我有以下两个 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 来获得您想要的结果。