【发布时间】:2019-10-24 21:41:26
【问题描述】:
我想根据 SQL 中 trans_num '2' 的开始日期计算 trans_num '1' 的结束日期。结束日期是 trans_num '2' 的开始日期 - 1. 我该怎么做?请参阅图片了解更多信息。
【问题讨论】:
标签: azure-sqldw
我想根据 SQL 中 trans_num '2' 的开始日期计算 trans_num '1' 的结束日期。结束日期是 trans_num '2' 的开始日期 - 1. 我该怎么做?请参阅图片了解更多信息。
【问题讨论】:
标签: azure-sqldw
您可以使用 Azure SQL 数据仓库中的 LAG 和 LEAD 函数来引用不同的行。更多详情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 的形式(根据我的脚本)而不是屏幕图提供模式和数据也有很大帮助。
【讨论】: