移动平均与合计

Snowflake 中的 Window Functions

Jake Roach

Field Data Engineer

累计平均与合计

显示"滑动"窗口框架的输出。

Snowflake 中的 Window Functions

"移动"平均与合计

显示移动平均的输出。

Snowflake 中的 Window Functions

"移动"平均与合计

显示移动合计的输出。

Snowflake 中的 Window Functions

移动计算

SELECT
    ...

    AVG(<1>) OVER(
        PARTITION BY ...
        ORDER BY <2>

        -- 窗口覆盖前 X 行
        -- 和后 Y 行记录

ROWS BETWEEN <X> PRECEDING AND <Y> FOLLOWING
) ...

指定当前行前后记录数

ROWS BETWEEN X PRECEDING AND Y FOLLOWING
  • "移动"计算,非累计
  • 仍可用 CURRENT ROW

$$

<X>:向前回看行数

<Y>:向后前瞻行数

Snowflake 中的 Window Functions

创建移动平均

SELECT
    member_id, workout_date, calories_burned,

    -- 使用窗口创建移动平均,包含上一次、当前、下一次训练

    AVG(calories_burned) OVER(
        PARTITION BY member_id
        ORDER BY workout_date

ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
) AS moving_avg_cb FROM FITNESS.workouts;
Snowflake 中的 Window Functions

创建移动平均

             member_id  |  workout_date  |   calories_burned  |  moving_avg_cb  
            ----------- | -------------- | ------------------ | --------------- 
               m_192    |   2024-01-01   |         105        |      130.5      
               m_192    |   2024-01-03   |         156        |      110.0      
               m_192    |   2024-01-04   |          69        |      109.0      
               m_192    |   2024-01-10   |         102        |      120.0      
               m_192    |   2024-01-11   |         189        |      127.3     
               m_192    |   2024-01-12   |          91        |      145.0     
               m_192    |   2024-01-16   |         155        |      127.7      
               m_192    |   2024-01-19   |         137        |      133.7      
               m_192    |   2024-01-20   |         109        |      123.0      

               m_74     |   2024-02-10   |         374        |      385.0      
                                        ...
Snowflake 中的 Window Functions

用移动合计通知会员

SELECT
    member_id, workout_date, calories_burned,

    ...

    -- 使用 CURRENT ROW 避免"前瞻"
    SUM(calories_burned) OVER(
        PARTITION BY member_id
        ORDER BY workout_date

ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
) AS last_3_cb FROM FITNESS.workouts;
Snowflake 中的 Window Functions

用移动合计通知会员

      member_id  |  workout_date  |   calories_burned  |  moving_avg_cb  |  last_3_cb
     ----------- | -------------- | ------------------ | --------------- | -----------
        m_192    |   2024-01-01   |         105        |      130.5      |     105
        m_192    |   2024-01-03   |         156        |      110.0      |     261
        m_192    |   2024-01-04   |          69        |      109.0      |     330
        m_192    |   2024-01-10   |         102        |      120.0      |     327
        m_192    |   2024-01-11   |         189        |      127.3      |     360
        m_192    |   2024-01-12   |          91        |      145.0      |     382
        m_192    |   2024-01-16   |         155        |      127.7      |     435
        m_192    |   2024-01-19   |         137        |      133.7      |     383
        m_192    |   2024-01-20   |         109        |      123.0      |     401

        m_74     |   2024-02-10   |         374        |      385.0      |     374
                                            ...
Snowflake 中的 Window Functions

Passons à la pratique !

Snowflake 中的 Window Functions

Preparing Video For Download...