The following sequence manipulator functions take a variety of input sequence or scalar arguments and produce result sequences or scalar types as described in the table below:
seq_repeat( n_times ) Return the sequence with each element of the object's sequence repeated n_times seq_reverse( input ) Return the input sequence in reverse order seq_concat( input1, input2 ) Return the input1 sequence concatenated with the input2 sequence seq_subseq( input, from, till ) Return the sub-sequence [from,till] of the input sequence seq_diff( input ) Return the sequence consisting of the differences between pairs of the input sequence elements seq_unique( input ) Return only the unique elements in the ordered input sequence by "collapsing duplicates" seq_norm( input ) Return the normalized values of the input sequence; i.e. divide each sequence element by the square root of the sum of squares of all elements seq_trend( input ) Return the trend by comparing pairs seq_ceil( input ) Return the sequence of nearest integer values greater than the input element values of type double seq_floor( input ) Return the sequence of nearest integer values less than the input element values of type double seq_stretch() Returns a sequence of the same length as argument 1 containing values from the sequence val seq_stretch0() Returns a sequence of the same length as argument 1 containing values from the sequence val. Injects missed elements associated with argument 2 so that the corresponding timestamps of ts1 and ts2 are matched seq_asof_join() Return the sequence of the values sequence corresponding to the timestamp of ts2 closest to the timestamp of ts1. For example, assume ts1 = {4,9}
, ts2 ={1,3,6,10}
, and values ={0.1,0.3,0.6,1.0}
. With these input sequences the result will be{0.3,1.0}
seq_cross( input, cross_direction ) Return the positions in the sequence where it crosses zero. If the integer argument cross_direction is positive then the result sequence starts with the first cross above zero; if negative it starts with cross below zero; if cross_direction is zero then it doesn't matter, i.e. the first cross can be above or below zero. seq_extrema( input, first_extremum ) Return the positions of extrema (local minimum and maximums) in the input sequence. If the integer argument first_extremum is positive then the result sequence starts with first local maximum; if negative it starts with with local minimum; if first_extremum is zero then it doesn't matter. Example
Following is an example code snippet demonstrating sequence manipulator methods:
-- seq_repeat, seq_reverse INSERT INTO SimpleSequence(testNumber,iVal1) VALUES(4,'{42,17}'); SELECT iVal1,seq_repeat(iVal1,3) AS "repeat" FROM SimpleSequence WHERE testNumber=4; SELECT iVal1,seq_reverse(iVal1) AS "reverse" FROM SimpleSequence WHERE testNumber=4; iVal1{} repeat{} ------------------------------------------------------------------------- {42, 17} {42, 42, 42, 17, 17, 17} iVal1{} reverse{} ------------------------------------------------------------------------- {42, 17} {17, 42} -- seq_concat, seq_subseq INSERT INTO SimpleSequence(testNumber,iVal1,iVal2) VALUES(1,'{42,-13,27,19}','{2,3}'); SELECT iVal1,iVal2,seq_concat(iVal1,iVal2) AS "concat" FROM SimpleSequence WHERE testNumber=1; SELECT iVal1, seq_subseq(iVal1,1,2) AS "subseq" FROM SimpleSequence WHERE testNumber = 1; iVal1{} iVal2{} concat{} ------------------------------------------------------------------------- {42, -13, 27, 19} {2, 3} {42, -13, 27, 19, 2, 3} iVal1{} subseq{} ------------------------------------------------------------------------- {42, -13, 27, 19} {-13, 27} -- seq_diff, seq_unique INSERT INTO SimpleSequence(testNumber,iVal1) VALUES(2,[4,9,2,9,1,4,9,7,5,3]); INSERT INTO SimpleSequence(testNumber,iVal1) VALUES(3,[4,4,7,7,7,5,4,3]); SELECT iVal1, seq_diff(iVal1) AS "diff" FROM SimpleSequence WHERE testNumber = 2; SELECT iVal1, seq_unique(iVal1) AS "unique" FROM SimpleSequence WHERE testNumber = 3; iVal1{} diff{} ------------------------------------------------------------------------- {4, 9, 2, 9, 1, 4, 9, 7, 5, 3} {0, 5, -7, 7, -8, 3, 5, -2, -2, -2} iVal1{} unique{} ------------------------------------------------------------------------- {4, 4, 7, 7, 7, 5, 4, 3} {4, 7, 5, 4, 3} -- seq_norm, seq_trend INSERT INTO SimpleSequence(testNumber,dVal1) VALUES(5,[1,2,3]); INSERT INTO SimpleSequence(testNumber,iVal1) VALUES(6,[1,2,3,3,2,2,4,5,6,5]); SELECT dVal1, seq_norm(dVal1) AS "norm" FROM SimpleSequence WHERE testNumber = 5; SELECT iVal1, seq_trend(iVal1) AS "trend" FROM SimpleSequence WHERE testNumber = 6; dVal1{} norm{} ------------------------------------------------------------------------- {1, 2, 3} {0.267261241912424, 0.534522483824849, 0.801783725737273} iVal1{} trend{} ------------------------------------------------------------------------- {1, 2, 3, 3, 2, 2, 4, 5, 6, 5} {0, 1, 1, 1, -1, -1, 1, 1, 1, -1} -- seq_ceil, seq_floor INSERT INTO SimpleSequence(testNumber,dVal1) VALUES(4,[2.9,3.14,4.6]); SELECT dVal1, seq_ceil(dVal1) AS "ceil" FROM SimpleSequence WHERE testNumber = 4; SELECT dVal1, seq_floor(dVal1) AS "floor" FROM SimpleSequence WHERE testNumber = 4; dVal1{} ceil{} ------------------------------------------------------------------------- {2.9, 3.14, 4.6} {3, 4, 5} dVal1{} floor{} ------------------------------------------------------------------------- {2.9, 3.14, 4.6} {2, 3, 4} -- seq_stretch, seq_stretch0 INSERT INTO SimpleSequence(testNumber,ts1,ts2,dVal3) VALUES(5,'{1,2,3,4,5}','{2,4}','{1.1,2.2}'); INSERT INTO SimpleSequence(testNumber,ts1,ts2,dVal3) VALUES(6,'{1,2,3,5}','{2,3,4}','{1.1,1.2,1.3}'); SELECT ts1,ts2,dVal3,seq_stretch(ts1,ts2,dVal3) AS "stretch" FROM SimpleSequence WHERE testNumber=5; SELECT ts1,ts2,dVal3,seq_stretch0(ts1,ts2,dVal3) AS "stretch0" FROM SimpleSequence WHERE testNumber=6; ts1{} ts2{} dVal3{} stretch{} ------------------------------------------------------------------------- {1, 2, 3, 4, 5} {2, 4} {1.1, 2.2} {1.1, 2.2, 2.2, 1, 1} ts1{} ts2{} dVal3{} stretch0{} ------------------------------------------------------------------------- {1, 2, 3, 5} {2, 3, 4} {1.1, 1.2, 1.3} {0, 1.1, 1.2, 1.3, 0} -- _asof_join INSERT INTO SimpleSequence(testNumber,ts1,ts2,dVal3) VALUES(7,'{4,9}','{1,3,6,10}','{0.1,0.3,0.6,1.0}'); SELECT ts1,ts2,dVal3,seq_asof_join(ts1,ts2,dVal3) AS "asof_join" FROM SimpleSequence WHERE testNumber=7; ts1{} ts2() dVal3{} asof_join{} ------------------------------------------------------------------------- {4, 9} {1, 3, 6, 10} {0.1, 0.3, 0.6, 1} {0.3, 1} -- _cross INSERT INTO SimpleSequence(testNumber,iVal1) VALUES(8,'{-1,0,1,-3,2}'); SELECT iVal1,seq_cross(iVal1,-1) AS "cross-neg", seq_cross(iVal1,1) AS "cross-pos", seq_cross(iVal1,0) AS "cross-0" FROM SimpleSequence WHERE testNumber=8; iVal1{} cross-neg{} cross-pos{} cross-0{} ------------------------------------------------------------------------- {-1, 0, 1, -3, 2} {3} {1, 4} {1, 3, 4}