LAST_VALUE()
是一个 SQL 窗口函数,用于获取窗口中最后一行的特定列的值
假设我们有一个名为 orders
的表,其中包含以下列:order_id
、customer_id
和 order_date
。我们想要查询每个客户的最近订单日期。这是一个使用 LAST_VALUE()
函数的实际案例:
WITH order_summary AS (
SELECT
customer_id,
order_date,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) AS row_num,
COUNT(*) OVER (PARTITION BY customer_id) AS total_rows
FROM
orders
)
SELECT
customer_id,
LAST_VALUE(order_date) OVER (PARTITION BY customer_id ORDER BY row_num ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS latest_order_date
FROM
order_summary
WHERE
row_num = total_rows;
在这个查询中,我们首先使用 ROW_NUMBER()
和 COUNT()
窗口函数创建一个名为 order_summary
的临时表,其中包含每个客户的订单日期、行号(按订单日期排序)以及该客户的总订单数。
然后,我们从 order_summary
表中选择 customer_id
和 LAST_VALUE(order_date)
。LAST_VALUE()
函数根据 row_num
对窗口进行排序,并在当前行及其后面的所有行中查找最后一个 order_date
值。由于我们只关心每个客户的最后一个订单日期,因此在 WHERE
子句中指定 row_num = total_rows
。
这将返回一个结果集,其中包含每个客户的 customer_id
和他们最近的 order_date
。