select 不同于多列 return 多列(所有列)PSQL
select distinct from multiple columns return multiple columns (all columns) PSQL
我正在尝试对每个符号有多个日期的 OHLC 数据执行不同的操作
我可以自己完成操作,它只有 return 的日期和符号
select distinct timestamp, symbol from mv_qs_facts group by mv_qs_facts.symbol, mv_qs_facts.timestamp;
但我希望 return 所有栏目(附加:收盘价、开盘价、最高价、最低价、成交量)。
我的目标是return最后一个不同的(时间戳,符号)
我有一个想法。
select distinct on (timestamp, symbol), close, open, high, low from mv_qs_facts group by mv_qs_facts.symbol, mv_qs_facts.timestamp;
我看这不像这句话那么简单。
我读过我可以通过子查询、临时 table 或连接(所有这些都不使用 distinct)来解决它。
这是您的问题。
select distinct t1.* from (
select row_number() over (partition by symbol order by timestamp desc) as rn, * from
mv_qs_facts) as t1
where t1.rn = 1
使用DISTINCT ON ()
:
SELECT DISTINCT ON (timestamp, symbol)
timestamp, symbol, close, open, high, low
FROM mv_qs_facts;
这将 return close
、open
、high
和 low
用于组中的随机成员。
如果要控制使用哪个成员,请添加 ORDER BY
子句,然后采用此顺序中的第一个成员。
如果问题是内存消耗在客户端,你应该使用游标:
BEGIN;
DECLARE c CURSOR FOR SELECT ...;
FETCH 100 FROM c;
FETCH 100 FROM c;
...
COMMIT;
我 added id 因为我最初将时间戳和日期作为我的复合键,但事实证明它对重复日期很糟糕,我需要一些参考来排序
CREATE materialized view temp AS
SELECT DISTINCT ON (symbol, timestamp)
id, timestamp, symbol, close, open, high, low
FROM qs_facts order by symbol, timestamp, id desc;
我正在尝试对每个符号有多个日期的 OHLC 数据执行不同的操作
我可以自己完成操作,它只有 return 的日期和符号
select distinct timestamp, symbol from mv_qs_facts group by mv_qs_facts.symbol, mv_qs_facts.timestamp;
但我希望 return 所有栏目(附加:收盘价、开盘价、最高价、最低价、成交量)。
我的目标是return最后一个不同的(时间戳,符号)
我有一个想法。
select distinct on (timestamp, symbol), close, open, high, low from mv_qs_facts group by mv_qs_facts.symbol, mv_qs_facts.timestamp;
我看这不像这句话那么简单。
我读过我可以通过子查询、临时 table 或连接(所有这些都不使用 distinct)来解决它。
这是您的问题。
select distinct t1.* from (
select row_number() over (partition by symbol order by timestamp desc) as rn, * from
mv_qs_facts) as t1
where t1.rn = 1
使用DISTINCT ON ()
:
SELECT DISTINCT ON (timestamp, symbol)
timestamp, symbol, close, open, high, low
FROM mv_qs_facts;
这将 return close
、open
、high
和 low
用于组中的随机成员。
如果要控制使用哪个成员,请添加 ORDER BY
子句,然后采用此顺序中的第一个成员。
如果问题是内存消耗在客户端,你应该使用游标:
BEGIN;
DECLARE c CURSOR FOR SELECT ...;
FETCH 100 FROM c;
FETCH 100 FROM c;
...
COMMIT;
我 added id 因为我最初将时间戳和日期作为我的复合键,但事实证明它对重复日期很糟糕,我需要一些参考来排序
CREATE materialized view temp AS
SELECT DISTINCT ON (symbol, timestamp)
id, timestamp, symbol, close, open, high, low
FROM qs_facts order by symbol, timestamp, id desc;