簡體   English   中英

在 SQL Server 中將單列日期列表轉換為多日期范圍

[英]Convert Single column list of dates into Multiple Date Range in SQL Server

我有一個業務需求,我需要將列表日期轉換為日期范圍邏輯將創建日期范圍直到連續日期,如果日期不連續,則將創建新范圍

下面是示例表

  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

下面是我嘗試過的查詢,它正在工作,但我們需要添加從日期和到日期過濾器,因此在添加過濾器后 OutPut 是不正確的

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)

,原因可能是比較 varchars 而不是普通日期。

我建議您使用以下條件:

where Date >= '2020-01-09' and Date <= '2020-01-23'

順便說一句,我還建議您編輯最終的 SQL 子句,因為不清楚您將哪一列命名為“日期”。

請讓我知道它是否有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM