我的資料庫中有下表(postgres)
CREATE TABLE "quarterly" (
"ticker" varchar,
"quarter_date" date,
"statement_type" int4,
"statement" jsonb,
PRIMARY KEY ("ticker", "quarter_date", "statement_type")
);
現在,我想以某種方式撰寫將具有相同日期的所有陳述句連接到單行的查詢。理想的輸出是這樣的:
股票代碼、季度日期、statement1、statement2、statement3
如果我可以根據它們的型別命名陳述句列,那就更好了。我對這個問題的第一次嘗試是以下代碼:
select Q1.ticker, Q1.quarter_date, Q1.statement, Q2.statement
from quarterly Q1, quarterly Q2
where Q1.quarter_date = Q2.quarter_date and Q1.ticker = Q2.ticker
我對 sql 真的很陌生,所以我不知道如何擴展這種方法來合并超過 2 個陳述句。我現在有 4 個“statement_types”,將來可能會有更多。如果這可以只用 sql 而不是在我的后端來完成,那就太好了。有沒有辦法做到這一點?
uj5u.com熱心網友回復:
也許使用帶有 row_number () 函式的交叉表
SELECT * FROM crosstab
(
'select
ticker,
quarter_date,
row_number() over (partition by ticker,quarter_date order by statement_type) as r,
statement
from quarterly order by 1,2,3')
AS ct (
ticker varchar(15),
quarter_date date,
statement1 jsonb ,
statement2 jsonb ,
statement3 jsonb,
statement4 jsonb);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/462282.html
標籤:sql PostgreSQL 加入
上一篇:比“for回圈”更快的方法-通過2d陣列索引3dnumpy陣列
下一篇:帶有三個表和外鍵的SQL選擇
