Snowflake में Window Functions
Jake Roach
Field Data Engineer
LAG किसी मान की तुलना पिछले रिकॉर्ड के मान से करने देता है
SELECT <fields>,LAG(<1>, <2>, <3>) OVER( PARTITION BY <4> ORDER BY <5> )...;
$$
$$
<1>: पिछले रिकॉर्ड से लाने वाला फ़ील्ड
<2>: कितने रिकॉर्ड पीछे देखें
<3>: रिकॉर्ड न होने पर डिफॉल्ट मान, 0
<4>: पार्टिशन करने वाला फ़ील्ड
<5>: रिकॉर्ड का क्रम तय करने वाला फ़ील्ड
$$

SELECT member_id AS m_id, workout_date AS wd, calories_burned AS cb, -- पिछली वर्कआउट से जली कैलोरी प्राप्त करेंLAG(calories_burned, 1) OVER( PARTITION BY member_id ORDER BY workout_date ) AS past_cb,FROM fitness.workouts;
m_id | wd | cb | past_cb
------ | ------------ | ----- | ---------
m_192 | 2024-01-01 | 105 | null
m_192 | 2024-01-03 | 156 | 105
m_192 | 2024-01-04 | 69 | 156
m_192 | 2024-01-10 | 102 | 69
m_74 | 2024-02-10 | 374 | null
m_74 | 2024-02-13 | 396 | 374
m_74 | 2024-02-14 | 504 | 396
m_233 | 2024-03-05 | 51 | null
m_233 | 2024-03-12 | 81 | 51
SELECT ... LAG(calories_burned, 1) OVER( PARTITION BY member_id ORDER BY workout_date ) AS past_cb, -- जली कैलोरी के अंतर को निकालें ``` {sql} calories_burned - LAG(calories_burned, 1, calories_burned) OVER( PARTITION BY member_id ORDER BY workout_date ) AS more_cb,FROM fitness.workouts;
m_id | wd | cb | past_cb | more_cb
------- | ------------ | ----- | --------- | ---------
m_192 | 2024-01-01 | 105 | null | 0
m_192 | 2024-01-03 | 156 | 105 | 51
m_192 | 2024-01-04 | 69 | 156 | -87
m_192 | 2024-01-10 | 102 | 69 | 33
m_74 | 2024-02-10 | 374 | null | 0
m_74 | 2024-02-13 | 396 | 374 | 22
m_74 | 2024-02-14 | 504 | 396 | 108
m_233 | 2024-03-05 | 51 | null | 0
m_233 | 2024-03-12 | 81 | 51 | 30
LEAD किसी मान की तुलना "भविष्य" के रिकॉर्ड के मान से करने देता है
$$
<1>: पिछले रिकॉर्ड से लाने वाला फ़ील्ड
<2>: कितने रिकॉर्ड आगे देखें
<3>: रिकॉर्ड न होने पर डिफॉल्ट मान
<4>: पार्टिशन करने वाला फ़ील्ड
<5>: रिकॉर्ड का क्रम तय करने वाला फ़ील्ड
SELECT <fields>,LEAD(<1>, <2>, <3>) OVER( PARTITION BY <4> ORDER BY <5> )...;
SELECT
member_id,
workout_date
calories_burned,
-- इस वर्कआउट के बाद अगली वर्कआउट तिथि खोजें
LEAD(workout_date, 1) OVER(
PARTITION BY member_id
ORDER BY workout_date
) AS next_workout_date
FROM fitness.workouts;
m_id | workout_date | calories_bured | next_workout_date
------- | -------------- | ---------------- | -------------------
m_192 | 2024-01-01 | 105 | 2024-01-03
m_192 | 2024-01-03 | 156 | 2024-01-04
m_192 | 2024-01-04 | 69 | 2024-01-10
m_192 | 2024-01-10 | 102 | null
m_74 | 2024-02-10 | 374 | 2024-02-13
m_74 | 2024-02-13 | 396 | 2024-02-14
m_74 | 2024-02-14 | 504 | null
m_233 | 2024-03-05 | 51 | 2024-03-12
m_233 | 2024-03-12 | 81 | null
Snowflake में Window Functions