如何用 Oracle 中应用 Lead() 函数的同一列值替换最后一行中的 NULL?

Posted

技术标签:

【中文标题】如何用 Oracle 中应用 Lead() 函数的同一列值替换最后一行中的 NULL?【英文标题】:How to replace NULL in the last row with the same column's value on which Lead() function is applied in Oracle? 【发布时间】:2020-01-31 06:46:12 【问题描述】:

我已经在销售列上应用了lead() 函数,并且由于lead() 为列 following_year_sales 的最后一行返回 NULL,我希望该值是 1990776.95 而不是 NULL,如何解决这个问题?

我已使用此查询,输出显示在图像中。

SELECT 
 salesman_id,
 year, 
 sales,
 LEAD(sales) OVER (
 ORDER BY year
 ) following_year_sales
FROM 
 salesman_performance
WHERE
 salesman_id = 55;

请帮忙。

【问题讨论】:

问题很清楚,“a_horse”已经给你答案了。不过,我想知道为什么您要这样做。将NULL 留在最后一行有什么问题?显然,这是正确的报告;否则,将来阅读报告的人可能会产生错误的印象,即 2018 年的价值与 2017 年的价值相同。他们应该如何理解 2018 年的价值没有,而是否使用了 2017 年的值? 这只是一个示例,实际的任务是另外一回事,我想要该任务的逻辑,无论如何我找到了出路。 【参考方案1】:

您可以使用三个参数调用lead()。第二个是要向前看的行数,第三个是在没有这样的行的情况下使用的默认值。如果您再次指定该列作为默认值,它将使用该行的值

LEAD(sales, 1, sales) OVER (ORDER BY year) following_year_sales

【讨论】:

以上是关于如何用 Oracle 中应用 Lead() 函数的同一列值替换最后一行中的 NULL?的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE 偏移分析函数 lag()与lead() 用法

ORACLE 偏移分析函数 lag()与lead() 用法

Oracle分析函数之Lag和Lead()使用

lag与lead函数 oracle_11g

sql server 中 使用lead() over()函数报错:lead无法识别的内置函数。

MYSQL lag() 和lead()函数使用介绍