本示例显示如何基于包含时间系列数据的表创建虚拟表,并显示在查询基本表和虚拟表之间所存在的差异。
为了表述得更为清楚,这些示例使用值 t1 到 t6 指示 DATETIME 值,而不显示完整的 DATETIME 字符串。
create row type stock_bar( timestamp datetime year to fraction(5), high real, low real, final real, vol real ); create table daily_stocks ( stock_id int, stock_name lvarchar, stock_data TimeSeries(stock_bar) );
stock_id | stock_name | stock_data |
---|---|---|
900 | AA01 | (t1, 7.25, 6.75, 7, 1000000), (t2, 7.5, 6.875, 7.125, 1500000), ... |
901 | GBase 8s | (t1, 97, 94.25, 95, 2000000), (t2, 97, 95.5, 96, 3000000), ... |
905 | FNM | (t1, 49.25, 47.75, 48, 2500000), (t2, 48.75, 48, 48.25, 3000000), ... |
select stock_id, Apply('$final', stock_data)::TimeSeries(one_real) from daily_stocks;
create row type one_real( timestamp datetime year to fraction(5), result real);
select stock_id, Clip(stock_data, t1, t2) from daily_stocks;
execute procedure TSCreateVirtualTab('daily_stocks_no_ts', 'daily_stocks');
因为该语句不指定 NewTimeSeries 参数,所以 daily_stocks_no_ts 不允许插入在 daily_stocks 中没有对应时间系列的元素。
此外,该语句还省略了 TSVTMode 参数,因此 TSVTMode 采用其缺省值 0。所以,如果将数据插入到 daily_stocks_no_ts,那么数据库服务器将使用 PutElemNoDups 将元素添加到 daily_stocks 中的底层时间系列。
stock_id | stock_name | timestamp* | high | low | final | vol |
---|---|---|---|---|---|---|
900 | AA01 | t1 | 7.25 | 6.75 | 7 | 1000000 |
900 | AA01 | t2 | 7.5 | 6.875 | 7.125 | 1500000 |
... | ... | ... | ... | ... | ||
901 | GBase | t1 | 97 | 94.25 | 95 | 2000000 |
901 | GBase | t2 | 97 | 95.5 | 96 | 3000000 |
... | ... | ... | ... | ... | ||
905 | FNM | t1 | 49.25 | 47.75 | 48 | 2500000 |
905 | FNM | t2 | 48.75 | 48 | 48.25 | 3000000 |
... | ... | ... | ... |
select stock_id, final from daily_stocks_no_ts;
select * from daily_stocks_no_ts where timestamp between t1 and t5;
select * from daily_stocks_no_ts where timestamp between t1 and t5 order by volume;
insert into daily_stock_no_ts values('GBase', t6, 55, 53, 54, 2000000);
元素 (t6, 55, 53, 54, 2000000) 将添加到 daily_stocks。