原始数据如下--
raw.csv
:
ticker , date ,value
a , 2023-12-20 ,6.01
a , 2023-12-21 ,-1
aa , 2023-12-20 ,0.53
aa , 2023-12-21 ,-0.88
aacg , 2023-12-20 ,-0.01
aacg , 2023-12-21 ,-0.02
aact , 2023-12-20 ,0.02
aact , 2023-12-21 ,0.03
创建用于导入的表:
create table stock (ticker text,date date,close numeric(4,2));
导入raw.csv:
\copy stock from 'raw.csv' with csv header delimiter ',';
我想选择所有值大于零且日期为“2023-12-20”的股票,同时值小于零且日期为“2023-12-21”。
select ticker from stock where (close>0 and date='2023-12-20') and (close<0 and date='2023-12-21') group by ticker;
ticker
--------
(0 rows)
可以看到
a
和aa
满足条件,那么如何获取股票呢?
查询中的
group by
确实没有意义,因为您没有进行聚合(SUM
、AVG
、COUNT
等)。
除此之外,你犯的错误是这样的句子“我想选择验证条件A的记录和验证条件B的记录”翻译成“我想选择验证任一条件的记录” A OR 条件 B(或两者)”。因此,查询应该是:
select ticker from stock where (close>0 and date='2023-12-20') or (close<0 and date='2023-12-21')