![](/img/trans.png)
[英]SQL server datetime column filter on certain date or range of dates
[英]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.