温馨提示×

sql last_value函数的实际案例

sql
小樊
82
2024-09-09 05:54:52
栏目: 云计算

LAST_VALUE() 是一个 SQL 窗口函数,用于获取窗口中最后一行的特定列的值

假设我们有一个名为 orders 的表,其中包含以下列:order_idcustomer_idorder_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_idLAST_VALUE(order_date)LAST_VALUE() 函数根据 row_num 对窗口进行排序,并在当前行及其后面的所有行中查找最后一个 order_date 值。由于我们只关心每个客户的最后一个订单日期,因此在 WHERE 子句中指定 row_num = total_rows

这将返回一个结果集,其中包含每个客户的 customer_id 和他们最近的 order_date

0