FIRST_VALUE函数用于返回指定数据流的第1条非NULL数据。
语法
FIRST_VALUE( T value )
FIRST_VALUE( T value, BIGINT order )
入参
参数 | 数据类型 | 说明 |
value | 任意参数类型 | 指定数据流。 说明
|
order | BIGINT | 根据order判定FIRST_VALUE所在行,取order值最小的记录作为FIRST_VALUE。 |
示例
测试表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
测试语句
测试语句1
根据用户user_id分组,并按create_time排序,返回每组中的第一个商品prooduct_id。
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;
测试语句2
根据商品product_id分组,按create_time判定用户user_id顺序,返回每个商品购买的第一个用户use_id。
SELECT product_id,FIRST_VALUE( `user_id`, UNIX_TIMESTAMP(create_time)) AS first_product FROM T1 group by product_id;
测试结果
测试结果1
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
测试结果2
product_id
first_user
1
user_001
2
user_002
3
user_003
4
user_001
5
user_002