滞后功能-为最后一个值创建虚拟行?

时间:2019-07-02 16:20:27

标签: sql sql-server-2012

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

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

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

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

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 个答案:

答案 0 :(得分:0)

我看不到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,因此您不必处理混合字符串和非字符串类型。