如何将下一行开始日期日期添加为上一行结束日期?

时间:2019-06-10 13:18:31

标签: azure-sqldw

DataImage

我想基于SQL中trans_num'2'的开始日期来计算trans_num'1'的结束日期。结束日期是trans_num'2'的开始日期-1.我该怎么做?请参考图片以获取更多信息。

1 个答案:

答案 0 :(得分:0)

您可以在Azure SQL数据仓库中使用LAGLEAD函数来引用不同的行。更多详细信息here

对于您有限的测试数据,我可以找到正确的答案,但是我确定您的测试数据或规则说明足够完整。无论如何,尝试这样的事情:

DROP TABLE IF EXISTS #tmp
GO

CREATE TABLE #tmp (
    ID          INT NOT NULL,
    StartDate   DATE NOT NULL,
    EndDate     DATE NOT NULL,
    TRANS_NUM   INT NOT NULL,
    Veh_Num     INT NOT NULL
)
WITH
(
    DISTRIBUTION = ROUND_ROBIN,
    HEAP
)
GO


INSERT INTO #tmp ( ID, StartDate, EndDate, TRANS_NUM, Veh_Num )
SELECT 10001, '12 Feb 2018', '12 Feb 2019', 1, 1
UNION ALL
SELECT 10001, '12 Feb 2018', '12 Feb 2019', 1, 2
UNION ALL
SELECT 10001, '16 Feb 2018', '12 Feb 2019', 2, 1
UNION ALL
SELECT 10001, '16 Feb 2018', '12 Feb 2019', 2, 2
GO


SELECT *,
    ISNULL(
        DATEADD( day, -1, LEAD( StartDate, 1 ) 
            OVER( PARTITION BY ID, Veh_num ORDER BY StartDate ) 
            ),
        EndDate) AS newEndDate
FROM #tmp
ORDER BY TRANS_NUM, Veh_Num

如果这对您不起作用,请提供带有其他方案的更完整的测试数据集以及有关规则的完整说明。另外,以SQL形式(根据我的脚本)而不是屏幕图的形式提供架构和数据也很有帮助。