统计数据库中的一个值改变了多少次?

Count how many times a value in the database has changed?

我有数据,如下所示的 Box ID 列表:

boxID     DateTime
-----     --------
001       2021-06-24 00:00:01
001       2021-06-24 00:00:02
001       2021-06-24 00:00:04
001       2021-06-24 00:00:05
001       2021-06-24 00:00:06
911       2021-06-24 00:00:07
911       2021-06-24 00:00:09
911       2021-06-24 00:00:10
001       2021-06-24 00:00:11
001       2021-06-24 00:00:12
100       2021-06-24 00:00:13
100       2021-06-24 00:00:14
001       2021-06-24 00:00:15
911       2021-06-24 00:00:16
911       2021-06-24 00:00:17

我需要统计更改boxID后它们被使用了多少次?

我的预期 return 是:

boxID     used
-----     -----
001       3
911       2
100       1

我正在使用 SQL Server 2008,所以我无法使用 LAG() 功能。 还有其他功能可以帮助我解决这个问题吗? 任何帮助将不胜感激,谢谢。

使用行号差法:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (ORDER BY DateTime) rn1,
              ROW_NUMBER() OVER (PARTITION BY boxID ORDER BY DateTime) rn2
    FROM yourTable
)

SELECT boxID, COUNT(DISTINCT rn1 - rn2) AS used
FROM cte
GROUP BY boxID;