我有下表:
id insertDate
1 2015-01-01
22 2015-01-02
43 2015-01-03
46 2015-01-06
124 2015-01-07
最后,我想有可能将一天内不同的行分组,所以在这种情况下
id insertDate groups
1 2015-01-01 1
22 2015-01-02 1
43 2015-01-03 1
46 2015-01-06 2
124 2015-01-07 2
这怎么可能?我打赌这是一些花哨的窗口函数用法
答案 0 :(得分:4)
这是一个“差距和岛屿”问题。
以下是一种方法。这适用于SQL Server 2005+。我假设insertDate
根据您的示例数据是唯一的。
WITH CTE
AS (SELECT *,
DATEDIFF(DAY, 0, [insertDate]) - ROW_NUMBER() OVER (ORDER BY ID) AS Grp
FROM YourTable)
SELECT [id],
[insertDate],
DENSE_RANK() OVER (ORDER BY Grp) AS Grp
FROM CTE