## Syntax
```mermaid
%%{init: {
'theme': 'base',
'flowchart': { 'padding': '7', 'nodeSpacing': '20', 'rankSpacing': '20' },
'themeVariables': {
'fontSize': '11px',
'fontFamily': 'Arial'
}
}}%%
flowchart TD
firstAggregateFunction_start((START))
firstAggregateFunction_start --> firstAggregateFunction_0_0[FIRST]:::quoted
firstAggregateFunction_0_0 --> firstAggregateFunction_0_1["("]:::quoted
firstAggregateFunction_0_1 --> firstAggregateFunction_0_2[<a href="Invantive UniversalSQL/Grammar/Expression" class="internal-link">expression</a>]
firstAggregateFunction_0_2 --> firstAggregateFunction_0_3[")"]:::quoted
firstAggregateFunction_0_3 --> firstAggregateFunction_end((END))
```
## Purpose
Group function to the first non-`null` value in an ordered result set. The order of the rows is determined by the source; combine with an `order by` in a nested query for a deterministic outcome.
## Examples
The following example retrieves the first contact person from a contact list, in the order in which the contacts are stored:
```sql
select first(cnt.contact_name)
from csvtable
( passing 'Acme Industries#Alice Johnson#CFO|Acme Industries#Tom Peters#Accounts Payable|Bergmann GmbH#Erika Weber#Controller|Carlson Ltd#James Smith#CFO|Dubois SA#Marie Dupont#Accounts Payable'
row delimiter '|'
column delimiter '#'
columns customer_name varchar2 position next
, contact_name varchar2 position next
, role varchar2 position next
) cnt
-------------------
Alice Johnson
```
The following example retrieves per customer the alphabetically first contact person, for instance as the default addressee for a dunning letter:
```sql
select srt.customer_name
, first(srt.contact_name)
from ( select cnt.customer_name
, cnt.contact_name
from csvtable
( passing 'Acme Industries#Alice Johnson#CFO|Acme Industries#Tom Peters#Accounts Payable|Bergmann GmbH#Erika Weber#Controller|Carlson Ltd#James Smith#CFO|Dubois SA#Marie Dupont#Accounts Payable'
row delimiter '|'
column delimiter '#'
columns customer_name varchar2 position next
, contact_name varchar2 position next
, role varchar2 position next
) cnt
order
by cnt.customer_name
, cnt.contact_name
) srt
group
by srt.customer_name
order
by srt.customer_name
-------------------
Acme Industries Alice Johnson
Bergmann GmbH Erika Weber
Carlson Ltd James Smith
Dubois SA Marie Dupont
```