我想基于SQL中trans_num'2'的开始日期来计算trans_num'1'的结束日期。结束日期是trans_num'2'的开始日期-1.我该怎么做?请参考图片以获取更多信息。
答案 0 :(得分:0)
您可以在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形式(根据我的脚本)而不是屏幕图的形式提供架构和数据也很有帮助。