Bir veri akışındaki ilk null olmayan değeri döndürür. FIRST_VALUE işlevini OVER yan tümcesinde bir pencere işlevi olarak veya GROUP BY ile birlikte bir toplama işlevi olarak kullanın.
Söz dizimi
FIRST_VALUE( T value )
FIRST_VALUE( T value, BIGINT order )
Bağımsız değişkenler
| Bağımsız değişken | Veri türü | Açıklama |
|---|---|---|
value |
Herhangi biri | Değerlendirilecek sütun veya ifade. Tüm girdi değerleri NULL ise NULL döndürür. Tüm bağımsız değişkenler aynı veri türünde olmalıdır. |
order |
BIGINT | Hangi kaydın ilk olarak kabul edileceğini belirleyen sayısal anahtar. En küçük order değerine sahip null olmayan kayıt döndürülür. |
Örnekler
Aşağıdaki örnekler T1 tablosunu kullanır:
| 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 |
Her kullanıcının satın aldığı ilk ürünü bulma
Satırları user_id değerine göre gruplandırır, her grubu create_time değerine göre sıralar ve kullanıcı başına en eski satırın product_id değerini döndürür.
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;
Sonuç:
| 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 |
Her ürünü satın alan ilk kullanıcıyı bulma
Satırları product_id değerine göre gruplandırır ve ürün başına en eski satın alımın user_id değerini döndürmek için UNIX_TIMESTAMP(create_time) ifadesini sıralama anahtarı olarak kullanır.
SELECT product_id,
FIRST_VALUE(`user_id`, UNIX_TIMESTAMP(create_time)) AS first_user
FROM T1
GROUP BY product_id;
Sonuç:
| product_id | first_user |
|---|---|
| 1 | user_001 |
| 2 | user_002 |
| 3 | user_003 |
| 4 | user_001 |
| 5 | user_002 |