更新时间:2023-02-07 10:19:58
因为看起来你可以使用T-SQL块,我想一个简单的方法就是使用暴力方法。请考虑以下代码:
Since it seems you can use T-SQL blocks I guess a simple way to do this is a brute force approach. Consider the following code:
-- New temp table
CREATE TABLE #temp2(st_date DATE,end_date DATE,usr_id INT);
--Initial rows
INSERT INTO #temp2 (st_date, end_date, usr_id)
SELECT st_date, end_date, usr_id
FROM #temp t
WHERE NOT EXISTS (SELECT 1
FROM #temp t2
WHERE t2.end_date = DATEADD(day, -1, t.st_date));
-- Update the end date until nothing to update anymore
BEGIN
WHILE 1=1 BEGIN
UPDATE t2
SET end_date = t.end_date
FROM #temp2 t2
INNER JOIN #temp t
ON t2.end_date = DATEADD(day, -1, t.st_date);
IF @@ROWCOUNT = 0 BEGIN
BREAK;
END;
END;
END;
-- Select the data
SELECT * FROM #temp2 ORDER BY usr_id, st_date;