如何在SQL中选择连续日期

宇智波(Gin Uchiha)

有没有检查连续日期的功能。我在处理以下问题时遇到问题:

我的表有一个datetime包含以下数据列:

----------
2015-03-11
2015-03-12
2015-03-13
2015-03-16

给定开始日期为2015-3-11,结束日期为2015-3-17我想要的结果是:

----------
2015-03-11
2015-03-12
2015-03-13

有人可以建议什么吗?

菲利克斯·帕米坦(Felix Pamittan)

我认为这是“连续日期分组岛”问题的一种变体可以使用ROW_NUMBER()

SQL小提琴

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

结果

|------------|
| 2015-03-11 |
| 2015-03-12 |
| 2015-03-13 |

这是SQL Server 2005版本:

SQL小提琴

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章