滞后函数 - 为最后一个值创建虚拟行?
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 不是实际字段。但是,您建议使用具有最大下一次检查日期的联合可能适用于此解决方案!非常感谢!以上是关于滞后函数 - 为最后一个值创建虚拟行?的主要内容,如果未能解决你的问题,请参考以下文章