我正在尝试使用ORDER BY在SQL中创建易失表,但出现错误。
CREATE VOLATILE TABLE orderd_dates AS
(SELECT * FROM date_table
ORDER BY id_date)
with data primary index (id_date) on commit preserve rows;
错误是:子查询中不允许使用ORDER BY。
如果我不能使用order by,如何创建已排序的易失表?
答案 0 :(得分:6)
SQL表本质上是无序的。查询表时(而不是创建表时),需要显式使用order by
子句。
答案 1 :(得分:2)
您可以添加TOP 100 PERCENT以允许ORDER BY,但是该表仍然是无序的,因为该表是由主索引的哈希在内部进行排序的。而且,如果您使用NO PRIMARY INDEX TABLE,并且它实际上将以指定的顺序存储,那么优化器将不会知道它。
您能获得的最接近的是PARTITION BY RANGE_N(id_date BETWEEN DATE '2000-01-01' AND DATE '2050-12-31' EACH INTERVAL '1' DAY
:
CREATE VOLATILE TABLE orderd_dates AS
(SELECT * FROM date_table
)
WITH DATA
PRIMARY INDEX (id_date)
PARTITION BY Range_N(id_date BETWEEN DATE '2000-01-01'
AND DATE '2050-12-31' EACH INTERVAL '1' DAY)
ON COMMIT PRESERVE ROWS;