【发布时间】:2022-01-06 16:33:23
【问题描述】:
我的桌子是
ts | symbol | bid
---------------------+--------+------
2009-01-01 03:00:00 | XYZ | 10
2009-01-01 03:00:03 | XYZ | 11
2009-01-01 03:00:06 | XYZ | 10.5
2009-01-01 03:00:09 | XYZ | 11
2009-01-01 03:00:00 | ABC | 10
2009-01-01 03:00:03 | ABC | 11
2009-01-01 03:00:06 | ABC | 11
2009-01-01 03:00:09 | ABC | 11
我想运行一个查询,首先获取符号为ABC 的所有行,然后我想根据条件将它们放在窗口中,然后选择第二个窗口。
子查询有效(如果不使用子查询)
select *
from
(select
ts, symbol, bid,
conditional_true_event(bid > 10.6) over(order by ts) as window
from Tickstore3
where symbol = 'ABC') as t3;
输出:
ts | symbol | bid | window
---------------------+--------+-----+--------
2009-01-01 03:00:00 | ABC | 10 | 0
2009-01-01 03:00:03 | ABC | 11 | 1 <-- I want to get only this row
2009-01-01 03:00:06 | ABC | 11 | 2
2009-01-01 03:00:09 | ABC | 11 | 3
但我不能只得到第二行
select *
from
(select
ts, symbol, bid,
conditional_true_event(bid > 10.6) over(order by ts) as window
from Tickstore3
where symbol = 'ABC') as t3
where window = 1;
我收到一个错误:
错误 4856:在字符 151 处或附近的“窗口”处出现语法错误
LINE 1: ...w from Tickstore3 where symbol='ABC') as t3 where window=1;
【问题讨论】:
-
不确定 vertica 但
window可能是一个有问题的标识符。我会换一个不同的。 -
@TheImpaler 是对的。
WINDOW是启动 named window 子句的关键字 - 一个保留字。切勿在对象名称中使用保留字。