gpt4 book ai didi

sql - 如何在sql中选择连续日期

转载 作者:行者123 更新时间:2023-12-03 14:19:22 25 4
gpt4 key购买 nike

是否有任何功能可以检查连续日期。我在处理以下问题时遇到问题:

我的 table 上有一个 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

任何人都可以提出任何建议吗?

最佳答案

我认为这是 的变体Grouping Islands of Contiguous Dates 问题。这可以使用 ROW_NUMBER() 来完成:

SQL Fiddle

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 Fiddle
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

关于sql - 如何在sql中选择连续日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29339563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com