【发布时间】:2023-03-12 06:57:01
【问题描述】:
我有下表:
IF OBJECT_ID('tempdb..#Temp') IS NOT NULL
DROP TABLE #Temp
CREATE TABLE #Temp
(
ID INT,
Category VARCHAR(100),
[Date] DATE
)
INSERT INTO #Temp VALUES
(1,'AAA','20200625'),
(1,'BBB','20200626'),
(1,'BBB','20200627'),
(1,'AAA','20200628'),
(1,'AAA','20200629'),
(1,'BBB','20200630'),
(1,'AAA','20200701'),
(2,'AAA','20200625'),
(2,'BBB','20200626'),
(2,'BBB','20200627'),
(2,'AAA','20200628'),
(2,'AAA','20200629'),
(2,'BBB','20200630'),
(2,'AAA','20200701')
我不知道如何将顺序整数分配给这样的类别:
ID Category Date GroupNumber
-------------------------------------------
1 AAA 25/06/2020 1
1 BBB 26/06/2020 2
1 BBB 27/06/2020 2
1 AAA 28/06/2020 3
1 AAA 29/06/2020 3
1 BBB 30/06/2020 4
1 AAA 01/07/2020 5
2 AAA 25/06/2020 1
2 BBB 26/06/2020 2
2 BBB 27/06/2020 2
2 AAA 28/06/2020 3
2 AAA 29/06/2020 3
2 BBB 30/06/2020 4
2 AAA 01/07/2020 5
我尝试了不同的窗口函数组合,但没有成功。目标是将数据卷起来,使其看起来像这样:
ID Category Date DateFrom DateTo
--------------------------------------------------
1 AAA 25/06/2020 25/06/2020 25/06/2020
1 BBB 26/06/2020 26/06/2020 27/06/2020
1 AAA 28/06/2020 28/06/2020 29/06/2020
1 BBB 30/06/2020 30/06/2020 30/06/2020
1 AAA 01/07/2020 01/07/2020 01/07/2020
2 AAA 25/06/2020 25/06/2020 25/06/2020
2 BBB 26/06/2020 26/06/2020 27/06/2020
2 AAA 28/06/2020 28/06/2020 29/06/2020
2 BBB 30/06/2020 30/06/2020 30/06/2020
2 AAA 01/07/2020 01/07/2020 01/07/2020
【问题讨论】:
标签: sql sql-server datetime window-functions gaps-and-islands