Rajesh Hegde
Rajesh Hegde

Reputation: 21

Lag Function in Snowflake

I have a requirement as below.

PRODUCT_ID SHIPMENT_YEAR SHIPMENT RETURN_QTY
1 2,016 140,464 2449
1 2,017 358,210 7433
1 2,018 14,299 798
1 2,019 12 1
1 2,020 11 0
1 2,021 15 0
1 2,022 1 0

The expected output is as below.

PRODUCT_ID SHIPMENT_YEAR SHIPMENT (C) RETURN_QTY (D) Effective Return Qty (E) Formula
1 2,016 140,464 2,449 138,015 C3 - D3
1 2,017 358,210 7,433 488,792 E3 + C4 - D4
1 2,018 14,299 798 502,293 E4 + C5 - D5
1 2,019 12 1 502,304 E5 + C6 - D6
1 2,020 11 0 502,315 E6 + C7 - D7
1 2,021 15 0 502,330 E7 + C8 - D8
1 2,021 1 0 502,331 E8 + C9 - D9

The column formula is to show how column E is derived.

Please help me to get above output using Snowflake query

Upvotes: 2

Views: 1320

Answers (1)

Simeon Pilgrim
Simeon Pilgrim

Reputation: 25903

You cannot use LAG, but can use a WINDOW FUNCTION on SUM, which allows you to accumulate a sum over the rows. Which is what you sre trying todo.

SELECT 
    product_id,
    shipment_year,
    shipment,
    return_qty,
    SUM( shipment - return_qty ) OVER (ORDER BY shipment_year) AS big_sum
FROM VALUES
    (1,2016,140464,2449),
    (1,2017,358210,7433),
    (1,2018,14299,798),
    (1,2019,12,1),
    (1,2020,11,0)
    t(product_id, shipment_year, shipment, return_qty);
PRODUCT_ID SHIPMENT_YEAR SHIPMENT RETURN_QTY BIG_SUM
1 2,016 140,464 2,449 138,015
1 2,017 358,210 7,433 488,792
1 2,018 14,299 798 502,293
1 2,019 12 1 502,304
1 2,020 11 0 502,315

Upvotes: 1

Related Questions