统计数据库中的一个值改变了多少次?
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;
我有数据,如下所示的 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;