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