滞后函数 - 为最后一个值创建虚拟行?

Posted

技术标签:

【中文标题】滞后函数 - 为最后一个值创建虚拟行?【英文标题】:Lag Function - Create Dummy Row for Last Value? 【发布时间】:2019-07-02 16:20:27 【问题描述】:

我无法分享代码或细节,因此希望这个一般性问题/示例有意义。

下一个到期日字段是系统中的物理字段;但是,截止日期字段不是。对于截止日期,我使用 SQL Server 2012 中的 LAG 函数从上一行“复制”下一个截止日期。它工作正常,但我想知道是否可以创建一个虚拟行来捕获最后一行的下一个到期日期?

在下面的示例中,您会看到第 1、2 和 3 行工作正常,因为该表包含实际数据,即 TestID。

我的问题:无论如何要制造一行(在本例中为第 4 行),因此我可以捕获下一个到期日 2/25/2020(以及纽约的位置),即使数据 (TestID)表中目前还不存在?

Row   TestID    Test Location     Due Date       Next Due Date
1     123       New York          02/05/2018*    10/13/2018
2     456       New York          10/13/2018     06/20/2019
3     789       New York          06/20/2019     02/25/2020
-------------------------------------------------------------------
4     n/a       New York          02/25/2020     n/a

*calculated

【问题讨论】:

【参考方案1】:

我不明白 lag() 与此有什么关系。你似乎想要:

select TestID, TestLocation, DueDate, NextDueDate
from t
union all
select null, TestLocation, max(nextDueDate) as dueDate, null as NextDueDate
from t
group by TestLocation;

请注意,我将多余的值保留为NULL,因此您不必处理混合字符串和非字符串类型。

【讨论】:

我必须使用 lag 因为字段 DueDate 不是实际字段。但是,您建议使用具有最大下一次检查日期的联合可能适用于此解决方案!非常感谢!

以上是关于滞后函数 - 为最后一个值创建虚拟行?的主要内容,如果未能解决你的问题,请参考以下文章

使用滞后函数访问当前行值

使用滞后函数的 SQL

SQL - 使用窗口函数创建滞后变量

如何对使用其自身输出的滞后值的函数进行矢量化?

基于另一列中的值的一列上的pyspark滞后函数

用python做时间序列预测六:相关函数图偏相关函数图滞后图