且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何在sql中按顺序排列日期范围

更新时间: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;