在 SQL 中,LAG()
是一個窗口函數,它可以訪問當前行之前的某一行
SELECT
order_id,
order_date,
order_amount,
LAG(order_amount) OVER (ORDER BY order_date) AS previous_order_amount
FROM
orders;
這里我們使用 LAG()
函數獲取每個訂單之前的訂單金額。OVER()
子句定義了窗口,按照 order_date
對訂單進行排序。
要結合其他窗口函數使用 LAG()
,只需將它們放入 SELECT
語句中,并在 OVER()
子句中指定相應的窗口。例如,如果你想計算每個訂單與前一個訂單的金額差異,并將其與滑動平均值結合起來,可以使用以下查詢:
SELECT
order_id,
order_date,
order_amount,
LAG(order_amount) OVER (ORDER BY order_date) AS previous_order_amount,
order_amount - LAG(order_amount) OVER (ORDER BY order_date) AS amount_difference,
AVG(order_amount) OVER (ORDER BY order_date ROWS BETWEEN 3 PRECEDING AND CURRENT ROW) AS moving_average
FROM
orders;
在這個示例中,我們首先使用 LAG()
函數獲取前一個訂單的金額,然后計算當前訂單與前一個訂單的金額差異。接下來,我們使用 AVG()
函數計算過去三個訂單(包括當前訂單)的滑動平均值。注意,在 OVER()
子句中,我們使用 ROWS BETWEEN 3 PRECEDING AND CURRENT ROW
來定義窗口范圍。
通過這種方式,你可以結合多個窗口函數來分析和處理數據。