SQL Server TSQL:将后续(日期)行放入bin

时间:2016-07-28 17:15:30

标签: sql-server tsql

我有下表:

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

这怎么可能?我打赌这是一些花哨的窗口函数用法

1 个答案:

答案 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