Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server中将单列日期列表转换为多个日期范围_Sql_Sql Server_Sql Server 2012_Azure Sql Database - Fatal编程技术网

在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

请让我知道它是否有用