以A股日K数据为例,股票日交易数据表结构为:
CREATE TABLE stock_daily
(
symbol String, -- 股票代码
name String, --股票名称
date Date, --交易日期
open Float32, --开盘价
low Float32, --最低价
high Float32, --最高价
close Float32, --收盘价
volume Int64, --成交量
amount Float64 --成交额
)
ENGINE = MergeTree(date, (symbol, date), 8192)
需求为获取每个股票最后五个交易日的交易数据。ClickHouse不提供窗口函数,那么解决思路变为先找到每个股票的最后五个交易日期,然后再通过股票代码和交易日期关联源表获得相应详细交易数据。
SELECT symbol,name,date,open,low,high,close,volume,amount
FROM
(
SELECT symbol,name,date,open,low,high,close,volume,amount
FROM stock_daily
)ALL INNER JOIN(
SELECT symbol,arrayJoin(dates)AS date
FROM
(
SELECT symbol,groupArray(5)(date)AS dates
FROM
(
SELECT symbol,date
FROM stock_daily
ORDER BY