是否有任何功能来检查连续日期.我在解决以下问题时遇到问题:
我的表有一个datetime包含以下数据的列:
----------
2015-03-11
2015-03-12
2015-03-13
2015-03-16
Run Code Online (Sandbox Code Playgroud)
给定开始日期2015-3-11和结束日期为2015-3-17.我希望结果如下:
----------
2015-03-11
2015-03-12
2015-03-13
Run Code Online (Sandbox Code Playgroud)
谁能提出任何建议?
我认为这有点像连续日期分组岛的问题.这可以使用ROW_NUMBER():
CREATE TABLE Test(
tDate DATETIME
)
INSERT INTO Test VALUES
('20150311'), ('20150312'), ('20150313'), ('20150316');
DECLARE @startDate DATE = '20150311'
DECLARE @endDate DATE = '20150317'
;WITH Cte AS(
SELECT
*,
RN = DATEADD(DD, - (ROW_NUMBER() OVER(ORDER BY tDATE) - 1), tDate)
FROM Test
WHERE
tDate >= @startDate
AND tDate < DATEADD(DAY, 1, @endDate)
)
SELECT CAST(tDate AS DATE)
FROM CTE
WHERE RN = @startDate
Run Code Online (Sandbox Code Playgroud)
结果
|------------|
| 2015-03-11 |
| 2015-03-12 |
| 2015-03-13 |
Run Code Online (Sandbox Code Playgroud)
这是SQL Server 2005版本:
DECLARE @startDate DATETIME
DECLARE @endDate DATETIME
SET @startDate = '20150311'
SET @endDate = '20150317'
;WITH Cte AS(
SELECT
*,
RN = DATEADD(DD, -(ROW_NUMBER() OVER(ORDER BY tDATE)-1), tDate)
FROM Test
WHERE
tDate >= @startDate
AND tDate < DATEADD(DAY, 1, @endDate)
)
SELECT CONVERT(VARCHAR(10), tDate, 121)
FROM CTE
WHERE RN = @startDate
Run Code Online (Sandbox Code Playgroud)