序列迭代函数
概述
迭代器函数用于从序列中提取元素。first 和 last 函数返回标量值。search() 函数用于从已实例化的序列中提取指定范围的元素。
函数 | 说明 |
---|---|
seq_first_int( input ) | 返回 input 整数序列中的第一个值 |
seq_first_real( input ) | 返回 input 浮点数序列中的第一个值 |
seq_last_int( input ) | 返回 input 整数序列中的最后一个值 |
seq_last_real( input ) | 返回 input 浮点数序列中的最后一个值 |
seq_search( input, from, to ) | 从已生成的 input 序列中返回指定范围内的元素序列。参数 from 和 to 指定对象序列中的值;boundary_from 和 boundary_to 是通常指定为 exdb.SeqIteratorBoundary.MCO_SEQ_BOUNDARY_INCLUSIVE 或 exdb.SeqIteratorBoundary.MCO_SEQ_BOUNDARY_EXCLUSIVE 的边界类型 |
seq_search_first( input, from, limit ) | 结合 seq_search() 和 seq_first() 以生成一个根据输入序列排序的序列,从第二个参数 from 指定的值开始,并具有第三个参数 limit 指定的最大值数量 |
seq_map( input1, input2 ) | 从 input1 序列中提取在 input2 序列中指定位置的元素。(位置应按升序提供(通常使用 filter_pos() 或 top_pos() 方法获取) |
seq_project( des, src ) | 将已实例化的序列 src 投影到目标序列 dst 。 |
加、减、乘、除函数
seq_add()
函数将序列 1 中的元素与序列 2 中的对应元素相加;seq_sub()
函数用序列 1 中的对应元素减去序列 2 中的元素;seq_mul()
函数将两个序列中的对应元素相乘;seq_div()
函数用序列 1 中的元素除以序列 2 中的对应元素。 以下是一个示例脚本,演示了 seq_add()
、seq_sub()
、seq_mul()
和 seq_div()
函数的用法:
INSERT INTO SimpleSequence(testNumber,dVal1,dVal2)
VALUES(1,'{1,2}','{3,4}');
SELECT dVal1,dVal2,seq_add(dVal1,dVal2) As "add" FROM SimpleSequence where testNumber=1;
SELECT dVal1,dVal2,seq_sub(dVal1,dVal2) As "sub" FROM SimpleSequence where testNumber=1;
SELECT dVal1,dVal2,seq_mul(dVal1,dVal2) As "mul" FROM SimpleSequence where testNumber=1;
SELECT dVal1,dVal2,seq_div(dVal1,dVal2) As "div" FROM SimpleSequence where testNumber=1;
dVal1{}
dVal2{}
add{}
--------------------------------------------------------------------
{1.000000, 2.000000}
{3.000000, 4.000000}
{4.000000, 6.000000}
dVal1{}
dVal2{}
sub{}
--------------------------------------------------------------------
{1.000000, 2.000000}
{3.000000, 4.000000}
{-2.000000, -2.00000}
dVal1{}
dVal2{}
mul{}
--------------------------------------------------------------------
{1.000000, 2.000000}
{3.000000, 4.000000}
{3.000000, 8.000000}
dVal1{}
dVal2{}
div{}
--------------------------------------------------------------------
{1.000000, 2.000000}
{3.000000, 4.000000}
{0.333333, 0.500000}
首项和末项函数
seq_first_int()
和 seq_last_int()
函数返回整数序列中的第一个或最后一个元素值;同样,seq_first_real()
和 seq_last_real()
函数返回实数序列中的第一个和最后一个值。 请注意,seq_first_int()
和 seq_last_int()
函数需要输入整数序列,并返回序列中的第一个和最后一个整数值。同样,seq_first_real()
和 seq_last_real()
函数需要输入实数序列,并返回序列中的第一个和最后一个实数值。 以下是一个示例脚本,演示了 seq_first_int()
、seq_last_int()
、seq_first_real()
和 seq_last_real()
函数的用法:
INSERT INTO SimpleSequence(testNumber,iVal1,fVal1)
VALUES(2,'{-3,-2,-1,0,1,2,3}','{11.1,17.7,-23.3,42.5}');
SELECT seq_first_int(iVal1) AS "first_int", seq_last_int(iVal1) AS "last_int",
seq_first_real(fVal1) AS "first_real", seq_last_real(fVal1) AS "last_real"
FROM SimpleSequence WHERE testNumber = 2;
first_int last_int first_real last_real
---------------------------------------------------------
-3 3 11.100000 42.500000
要使用 xSQL 演示此选择语句,可从 samples/xsql/scripts/financial 目录中运行以下命令来执行示例脚本:
f 1
搜索函数
seq_search()
函数会生成一个序列,该序列是根据由第二个和第三个参数指定的范围值所过滤出的序列进行排序的。
以下是一个展示 seq_search() 函数的示例脚本:
SELECT symbol, seq_search(day, 20130101, 20130331) as "Q1_13"
FROM Quote WHERE symbol='SYM0';
symbol
Q1_13{}
------------------------------------------------------------------------------
SYM0
{20130101, 20130104, 20130106, 20130110, 20130123, 20130125, 20130129,
20130213, 20130214, 20130216, 20130311, 20130326, 20130409}
在上述示例中,使用了“日期”值 20130101 和 20130331(格式为 yyyymmdd 的整数值)来返回 2013 年第一季度的日期序列。
要使用 xSQL 演示此选择语句,可从 samples/xsql/scripts/financial 目录中运行以下命令来执行示例脚本:
g 11
Search_First 和 Search_Last 函数
seq_search_first()
和 seq_search_last()
函数将 seq_search()
与 seq_first()
或 seq_last()
结合起来,生成一个根据输入序列排序的序列,从第二个参数指定的值开始,并包含第三个参数指定的最大值数量。
以下是一个示例脚本,演示了 seq_search_first() 和 seq_search_last() 函数:
SELECT symbol, seq_search_first(day, 20130101, 3) as "Q1_first3_13"
FROM Quote WHERE symbol='SYM0';
symbol
Q1_first3_13{}
------------------------------------------------------------------------------
SYM0
{20130101, 20130104, 20130106}
SELECT symbol, seq_search_last(day, 20130301, 3) as "Q1_last3_13"
FROM Quote WHERE symbol='SYM0';
symbol
Q1_last3_13{}
------------------------------------------------------------------------------
SYM0
{20130101}
在上述示例中,“日期”值 20130101 和 20130301(格式为 yyyymmdd 的整数值)用于指定 2013 年第一季度中一系列日期值的起始日期和截止日期。
要使用 xSQL 演示此选择语句,可从 samples/xsql/scripts/financial 目录中运行以下命令来执行示例脚本:
g 11
映射函数
seq_search_first()
和 seq_search_last()
函数将 seq_search()
与 seq_first()
或 seq_last()
结合起来,生成一个根据输入序列排序的序列,从第二个参数指定的值开始,并包含第三个参数指定的最大值数量。
以下是一个展示 seq_map() 函数的示例脚本:
INSERT INTO SimpleSequence(testNumber,iVal1,ui8)
VALUES(3,'{10,20,30}','{0,2}');
SELECT iVal1,ui8,seq_map(iVal1,ui8) AS "map" FROM SimpleSequence WHERE testNumber=3;
iVal1
ui8
map
---------------------------------
{10, 20, 30}
{0, 2}
{10, 30}
要使用 xSQL 演示此选择语句,可从 samples/xsql/scripts/financial 目录中运行以下命令来执行示例脚本:
f 5
生成函数
seq_project()
函数生成由第二个参数中指定序列的对应元素组成的序列。
以下是一个展示 seq_project() 函数的示例脚本:
SELECT symbol, seq_search(day, 20130101, 20130331) as Q1_13
seq_project(close, Q1_13)
FROM Quote WHERE symbol='SYM0';
symbol
Q1_13{}
close_project{}
------------------------------------------------------------------------------
SYM0
{20130101, 20130104, 20130106, 20130110, 20130123, 20130125, 20130129,
20130213, 20130214, 20130216, 20130311, 20130326}
{ 62.83, 45.79, 74.73, 53.46, 67.87, 50.37, 80.32,
29.94, 25.92, 37.28, 80.92, 57.73}
在上述示例中,使用了“日期”值 20130101 和 20130331(格式为 yyyymmdd 的整数值)来返回 2013 年第一季度的日期序列。
要使用 xSQL 演示此选择语句,可从 samples/xsql/scripts/financial 目录中运行以下命令来执行示例脚本:
g 11
示例
以下是一个示例代码片段,演示了 first 和 last 函数:
-- _first_int, _last_int, _first_real, _last_real
CREATE TABLE SimpleSequence11( testNumber unsigned(4) primary key,
dVal1 sequence(double), dVal2 sequence(double) );
INSERT INTO SimpleSequence(testNumber,iVal1,fVal1)
VALUES(2,'{-3,-2,-1,0,1,2,3}','{11.1,17.7,-23.3,42.5}');
SELECT seq_first_int(iVal1) AS "first_int", seq_last_int(iVal1) AS "last_int",
seq_first_real(fVal1) AS "first_real", seq_last_real(fVal1) AS "last_real"
FROM SimpleSequence WHERE testNumber = 2;
first_int
last_int
first_real
last_real
-------------------------------------------------------------------------
-3
3
11.1000003814697
42.5
正如“分析函数库示例”页面中所解释的那样,以下示例中的数据取自 2013 年 IBM 的历史值。通过在 samples/xsql/scripts/financial 目录中运行各种脚本将数据加载到 xSQL 中。要重现以下示例,请运行 g.bat(在 Linux 系统上为 g.sh),并指定示例编号 6。例如,以 scripts/financial 作为当前工作目录,只需键入:
g 6
以下是一个示例代码片段,演示了如何使用 search() 函数提取 2013 年 1 月的交易日期和成交量:
-- search
SELECT symbol, seq_search(day, 20130101, 20130131) as Jan_13,
volume@Jan_13 as "Volume_Jan_13"
FROM Quote WHERE symbol = 'SYM0';
symbol
Jan_13{}
Volume_Jan_13{}
-------------------------------------------------------------------------
SYM0
{20130101, 20130104, 20130106, 20130110, 20130123, 20130125, 20130129}
{335, 808, 45, 402, 732, 48, 805}