Devuelve el primer valor no nulo en un flujo de datos. Utilice FIRST_VALUE como función de ventana en una cláusula OVER, o como función de agregación con GROUP BY.
Sintaxis
FIRST_VALUE( T value )
FIRST_VALUE( T value, BIGINT order )
Argumentos
|
Argumento |
Tipo de dato |
Descripción |
|
|
Cualquiera |
La columna o expresión que se va a evaluar. Devuelve NULL si todos los valores de entrada son NULL. Todos los argumentos deben ser del mismo tipo de dato. |
|
|
BIGINT |
Una clave numérica que determina qué registro se considera primero. Se devuelve el registro no nulo con el valor de |
Ejemplos
A continuación se presentan ejemplos que utilizan la tabla T1:
|
user_id (VARCHAR) |
product_id (BIGINT) |
create_time (TIMESTAMP) |
|
user_001 |
1 |
2023-02-15 10:40:56 |
|
user_002 |
2 |
2023-02-15 11:40:56 |
|
user_003 |
3 |
2023-02-15 12:40:56 |
|
user_001 |
4 |
2023-02-15 13:40:55 |
|
user_002 |
5 |
2023-02-15 14:40:56 |
|
user_001 |
1 |
2023-02-15 15:40:56 |
|
user_003 |
4 |
2023-02-15 16:40:56 |
Buscar el primer producto que compró cada usuario
Agrupa las filas por user_id, ordena cada grupo por create_time y devuelve el product_id de la fila más antigua por usuario.
SELECT `user_id`, create_time, product_id,
FIRST_VALUE(product_id)
OVER (PARTITION BY `user_id` ORDER BY create_time) AS first_product
FROM T1;
Resultado:
|
user_id (VARCHAR) |
create_time (TIMESTAMP) |
product_id (BIGINT) |
first_product (BIGINT) |
|
user_001 |
2023-02-15 10:40:56 |
1 |
1 |
|
user_001 |
2023-02-15 13:40:56 |
4 |
1 |
|
user_001 |
2023-02-15 15:40:56 |
1 |
1 |
|
user_002 |
2023-02-15 11:40:56 |
2 |
2 |
|
user_002 |
2023-02-15 14:40:56 |
5 |
2 |
|
user_003 |
2023-02-15 12:40:56 |
3 |
3 |
|
user_003 |
2023-02-15 16:40:56 |
4 |
3 |
Buscar el primer usuario que compró cada producto
Agrupa las filas por product_id y utiliza UNIX_TIMESTAMP(create_time) como clave de ordenamiento para devolver el user_id de la compra más antigua por producto.
SELECT product_id,
FIRST_VALUE(`user_id`, UNIX_TIMESTAMP(create_time)) AS first_user
FROM T1
GROUP BY product_id;
Resultado:
|
product_id |
first_user |
|
1 |
user_001 |
|
2 |
user_002 |
|
3 |
user_003 |
|
4 |
user_001 |
|
5 |
user_002 |