【问题标题】:How to add next row start date date as the previous row end date?如何将下一行开始日期添加为上一行结束日期?
【发布时间】:2019-10-24 21:41:26
【问题描述】:

我想根据 SQL 中 trans_num '2' 的开始日期计算 trans_num '1' 的结束日期。结束日期是 trans_num '2' 的开始日期 - 1. 我该怎么做?请参阅图片了解更多信息。

【问题讨论】:

    标签: azure-sqldw


    【解决方案1】:

    您可以使用 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 的形式(根据我的脚本)而不是屏幕图提供模式和数据也有很大帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-21
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多