在SQL Server中将单列日期列表转换为多个日期范围
我有一个业务需求,我需要将列表日期转换为日期范围 逻辑将是创建直到连续日期的日期范围,如果日期不连续,则创建新范围 将创建 下面是示例表在SQL Server中将单列日期列表转换为多个日期范围,sql,sql-server,sql-server-2012,azure-sql-database,Sql,Sql Server,Sql Server 2012,Azure Sql Database,我有一个业务需求,我需要将列表日期转换为日期范围 逻辑将是创建直到连续日期的日期范围,如果日期不连续,则创建新范围 将创建 下面是示例表 ID Module Employeeid Date -------------------------------------------- 11 M1 9 2019-10-01 00:00:00.000 12 M1 9 2019-10
ID Module Employeeid Date
--------------------------------------------
11 M1 9 2019-10-01 00:00:00.000
12 M1 9 2019-10-02 00:00:00.000
13 M1 9 2019-10-03 00:00:00.000
14 M2 9 2019-10-04 00:00:00.000
15 M2 9 2019-10-05 00:00:00.000
16 M2 9 2019-10-08 00:00:00.000
17 M2 9 2019-10-09 00:00:00.000
要求的输出
Module Employeeid Start Date End Date
---------------------------------------------------
M1 9 2019-10-01 2019-10-03
M1 9 2019-10-04 2019-10-05
M1 9 2019-10-08 2019-10-09
下面是我尝试过的查询,它正在工作,但我们需要添加“从日期”和“到日期”筛选器
所以加上滤波器后输出是不合适的
WITH mycte
AS (SELECT *,
Dateadd(day, -Row_number()
OVER (
partition BY [[module]
ORDER BY [Date]), [Date]) AS grp
FROM [to_shiftschedule]
WHERE employeeid = 535
)
SELECT Min([Date]) AS[StartDate],
Max([Date]) AS[EndDate],
[employeeid],
[module]
FROM mycte
where CONVERT(VARCHAR, Date, 103) >= CONVERT(VARCHAR, '09/01/2020', 103)
AND CONVERT(VARCHAR, Date, 103) <= CONVERT(VARCHAR, '23/01/2020', 103)
GROUP BY[employeeid], [module], grp
ORDER BY[startdate] DESC;
如果问题是与日期过滤器,这是本节,我假设
where CONVERT(VARCHAR, Date, 103) >= CONVERT(VARCHAR, '09/01/2020', 103)
AND CONVERT(VARCHAR, Date, 103) <= CONVERT(VARCHAR, '23/01/2020', 103)
,原因可能是比较瓦查尔而不是普通日期
我建议您使用以下条件:
where Date >= '2020-01-09' and Date <= '2020-01-23'
顺便说一下,我还建议您编辑最后一个SQL子句,因为不清楚您将哪个列命名为Date
请让我知道它是否有用