LAG (Lakehouse v1)
LAG를 사용하면 같은 결과 집합 내 이전 행에 있는 열의 값에 접근할 수 있습니다. 보통 지정한 정렬 순서를 기준으로 이전 행에 있는 열의 값을 가져오는 데 사용합니다.
관련 항목: LEAD
Analyze 구문
섹션 제목: “Analyze 구문”func.lag(<expr>, <offset>).over(partition_by=[<columns>], order_by=[<columns>])Analyze 예제
섹션 제목: “Analyze 예제”table.product_name, table.sale_amount, func.lag(table.sale_amount, 1).over(partition_by=table.product_name, order_by=table.sale_id).alias('previous_sale_amount')
product_name | sale_amount | previous_sale_amount-----------------------------------------------Product A | 1000.00 | NULLProduct A | 1500.00 | 1000.00Product A | 2000.00 | 1500.00Product B | 500.00 | NULLProduct B | 800.00 | 500.00Product B | 1200.00 | 800.00SQL 구문
섹션 제목: “SQL 구문”LAG(expression [, offset [, default]]) OVER (PARTITION BY partition_expression ORDER BY sort_expression)- offset: 값을 가져올 위치를 파티션 내에서 현재 행보다 몇 행 앞(LEAD) 또는 뒤(LAG)로 할지 지정합니다. 기본값은 1입니다.
음수 오프셋을 설정하면 LEAD 함수를 사용하는 것과 같은 효과가 있습니다.
- default: 오프셋이 파티션 경계를 벗어나 LEAD 또는 LAG 함수가 사용할 수 있는 값이 없는 경우에 반환할 값을 지정합니다. 기본값은 NULL입니다.
SQL 예제
섹션 제목: “SQL 예제”CREATE TABLE sales ( sale_id INT, product_name VARCHAR(50), sale_amount DECIMAL(10, 2));
INSERT INTO sales (sale_id, product_name, sale_amount)VALUES (1, 'Product A', 1000.00), (2, 'Product A', 1500.00), (3, 'Product A', 2000.00), (4, 'Product B', 500.00), (5, 'Product B', 800.00), (6, 'Product B', 1200.00);
SELECT product_name, sale_amount, LAG(sale_amount) OVER (PARTITION BY product_name ORDER BY sale_id) AS previous_sale_amountFROM sales;
product_name | sale_amount | previous_sale_amount-----------------------------------------------Product A | 1000.00 | NULLProduct A | 1500.00 | 1000.00Product A | 2000.00 | 1500.00Product B | 500.00 | NULLProduct B | 800.00 | 500.00Product B | 1200.00 | 800.00
-- The following statements return the same result.SELECT product_name, sale_amount, LAG(sale_amount, -1) OVER (PARTITION BY product_name ORDER BY sale_id) AS next_sale_amountFROM sales;
SELECT product_name, sale_amount, LEAD(sale_amount) OVER (PARTITION BY product_name ORDER BY sale_id) AS next_sale_amountFROM sales;
product_name|sale_amount|next_sale_amount|------------+-----------+----------------+Product A | 1000.00| 1500.00|Product A | 1500.00| 2000.00|Product A | 2000.00| |Product B | 500.00| 800.00|Product B | 800.00| 1200.00|Product B | 1200.00| |