LAG ve LEAD

Snowflake'ta Pencere Fonksiyonları

Jake Roach

Field Data Engineer

LAG

LAG, bir değeri önceki kayıttaki bir değerle karşılaştırmayı sağlar

SELECT
    <fields>,

LAG(<1>, <2>, <3>) OVER( PARTITION BY <4> ORDER BY <5> )
...;

$$

$$

<1>: Önceki kayıttan alınacak alan

<2>: Geriye bakılacak kayıt sayısı

<3>: Kayıt yoksa varsayılan değer, 0

<4>: Bölünecek alan

<5>: Kayıtların sırasını belirleyen alan

Snowflake'ta Pencere Fonksiyonları

LAG

$$

LAG kullanılarak oluşturulmuş bir örnek veri seti

Snowflake'ta Pencere Fonksiyonları

LAG

SELECT
    member_id AS m_id, 
    workout_date AS wd,
    calories_burned AS cb,

    -- Son antrenmandan yakılan kalorileri alın

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
Snowflake'ta Pencere Fonksiyonları

LAG

SELECT
    ...
    LAG(calories_burned, 1) OVER(
        PARTITION BY member_id
        ORDER BY workout_date
    ) AS past_cb,

    -- Yakılan kalori farkını bulun
``` {sql}
    calories_burned - LAG(calories_burned, 1, calories_burned) OVER(
        PARTITION BY member_id
        ORDER BY workout_date
    ) AS more_cb,

FROM fitness.workouts;
Snowflake'ta Pencere Fonksiyonları

LAG

                  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 
Snowflake'ta Pencere Fonksiyonları

LEAD

LEAD, bir değeri "gelecekteki" bir kayıtla karşılaştırmayı sağlar

$$

<1>: Önceki kayıttan alınacak alan

<2>: İleriye bakılacak kayıt sayısı

<3>: Kayıt yoksa varsayılan değer

<4>: Bölünecek alan

<5>: Kayıtların sırasını belirleyen alan

SELECT
    <fields>,

LEAD(<1>, <2>, <3>) OVER( PARTITION BY <4> ORDER BY <5> )
...;
  • Genellikle tahmin görevlerinde kullanılır
Snowflake'ta Pencere Fonksiyonları

LEAD

SELECT
    member_id, 
    workout_date
    calories_burned,

    -- Bu antrenmandan sonra, bir sonraki antrenman tarihini bulun
    LEAD(workout_date, 1) OVER(
        PARTITION BY member_id
        ORDER BY workout_date
    ) AS next_workout_date

FROM fitness.workouts;
Snowflake'ta Pencere Fonksiyonları

LEAD

            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'ta Pencere Fonksiyonları

Haydi pratik yapalım!

Snowflake'ta Pencere Fonksiyonları

Preparing Video For Download...