34,590
社区成员
发帖
与我相关
我的任务
分享
IF(OBJECT_ID('tb') IS NOT NULL)
DROP TABLE tb
CREATE TABLE tb
(
id INT IDENTITY(1,1) PRIMARY KEY,
EventType VARCHAR(60)
)
INSERT INTO tb
SELECT '睡觉' UNION ALL
SELECT '睡觉' UNION ALL
SELECT '睡觉' UNION ALL
SELECT '睡觉' UNION ALL
SELECT '睡觉' UNION ALL
SELECT '吃饭' UNION ALL
SELECT '吃饭' UNION ALL
SELECT '吃饭' UNION ALL
SELECT '吃饭' UNION ALL
SELECT '睡觉' UNION ALL
SELECT '睡觉' UNION ALL
SELECT '睡觉' UNION ALL
SELECT '睡觉' UNION ALL
SELECT '睡觉'
SELECT* FROM tb
--将连续的相同的 EventType 放在一起
--最后展现效果
--StartID EndID EventType
-- 1 5 睡觉
-- 6 9 吃饭
-- 10 14 睡觉
IF(OBJECT_ID('tb') IS NOT NULL)
IF(OBJECT_ID('tb') IS NOT NULL)DECLARE @a table( id INT IDENTITY(1,1) PRIMARY KEY, EventType VARCHAR(60) )
INSERT INTO @a
SELECT '睡觉' UNION ALL
SELECT '睡觉' UNION ALL
SELECT '睡觉1' UNION ALL
SELECT '睡觉' UNION ALL
SELECT '睡觉' UNION ALL
SELECT '吃饭' UNION ALL
SELECT '吃饭' UNION ALL
SELECT '吃饭' UNION ALL
SELECT '吃饭' UNION ALL
SELECT '睡觉' UNION ALL
SELECT '睡觉' UNION ALL
SELECT '睡觉' UNION ALL
SELECT '睡觉' UNION ALL
SELECT '睡觉'
SELECT MIN(id)s,id1-1 e,EventType
FROM(
SELECT id,EventType,id1=isnull(( SELECT min(id) FROM @a WHERE id>a.id AND EventType<>a.EventType ),(SELECT MAX(id)+1 FROM @a))
FROM @a a
)aa GROUP BY id1,EventType
ORDER BY 1,2,3
--result
/*s e EventType
----------- ----------- ------------------------------------------------------------
1 2 睡觉
3 3 睡觉1
4 5 睡觉
6 9 吃饭
10 14 睡觉
(所影响的行数为 5 行)*/