first_value, last_value

first_value, last_value

The first_value and last_value aggregates return the first and last elements of window. Available only in the Enterprise Edition.

Synopsis

AFL% window(arraydimension1_lowdimension1_high [,dimension2_lowdimension2_high],... first_value(attribute))

AFL% variable_window(arraydimension,left_edge,right_edge, first_value(attribute))

Library

The first_value aggregate resides in the Linear Algebra library. Run the following query to load this library:

AFL% load_library('linear_algebra');

Summary

The first_value aggregate returns the first value from a subarray defined by a window aggregate. Note that if the window goes beyond the end of the array (in any direction), first_value fills-in values within the window that fall outside the array boundary with a constant value taken from the array boundary. This behavior is illustrated in an example below.

Examples

Calculate the First and Last Value from a 2x2 Moving Window on a 3×4 Array

To calculate the first and last value from a 2x2 moving window on a 3×4 array, do the following:

  1. Create a 3x4 array containing the values 0 to 11:

    AFL% create array M <val:double>[row=0:2; col=0:3]; AFL% store(build(M,row*4+col),M);


    The output is:

    {row,col} val {0,0} 0 {0,1} 1 {0,2} 2 {0,3} 3 {1,0} 4 {1,1} 5 {1,2} 6 {1,3} 7 {2,0} 8 {2,1} 9 {2,2} 10 {2,3} 11
  2. Select the first and last values from a 2x2 window on M:

    AFL% window(M, 0,1, 0, 1, first_value(val), last_value(val)); 


    The output is:

    {row,col} val_first_value,val_last_value {0,0} 0,5 {0,1} 1,6 {0,2} 2,7 {0,3} 3,7 {1,0} 4,9 {1,1} 5,10 {1,2} 6,11 {1,3} 7,11 {2,0} 8,9 {2,1} 9,10 {2,2} 10,11 {2,3} 11,11