FIRST_VALUE()
是一个窗口函数,用于返回窗口中第一行的值。窗口函数允许你在结果集的行之间执行计算,而不需要使用自连接或子查询。
SUM()
, AVG()
, COUNT()
等。ROW_NUMBER()
, RANK()
, DENSE_RANK()
等。LEAD()
, LAG()
, FIRST_VALUE()
, LAST_VALUE()
等。假设我们有一个名为 sales
的表,包含以下列:id
, product
, sale_date
, amount
。我们希望为每个产品重置第一个销售日期的值。
SELECT
product,
sale_date,
amount,
FIRST_VALUE(sale_date) OVER (PARTITION BY product ORDER BY sale_date) AS first_sale_date
FROM
sales;
在这个查询中:
PARTITION BY product
将数据按产品分组。ORDER BY sale_date
在每个分组内按销售日期排序。FIRST_VALUE(sale_date)
返回每个分组内按销售日期排序的第一行的销售日期。first_sale_date
没有正确显示?原因:
ORDER BY
子句正确地反映了你希望的排序顺序。FIRST_VALUE()
将返回 NULL
。解决方法:
COALESCE()
函数为 NULL
值提供默认值。SELECT
product,
sale_date,
amount,
COALESCE(FIRST_VALUE(sale_date) OVER (PARTITION BY product ORDER BY sale_date), '1970-01-01') AS first_sale_date
FROM
sales;
在这个示例中,如果 first_sale_date
为 NULL
,则使用 '1970-01-01'
作为默认值。
通过这种方式,你可以确保每个分组的 first_sale_date
都有一个有效的值。
领取专属 10元无门槛券
手把手带您无忧上云