SQL 语句实现分组 并计算

我有一个数据量很大的表 ID TIME STATE
例如
ID TIME STATE
1 01:01 0
1 01:02 0
1 01:03 1
1 01:04 1
1 01:05 1
1 01:06 0
2 01:02 0
2 01:03 1
2 01:04 1
3 01:03 0
3 01:04 0
3 01:05 1
3 01:06 1
3 01:07 0

希望得到 STATE=1 时 各个ID的连续时间(终止时间与起始时间的差值)
结果为
ID ConTIME
1 2
2 1
3 1

各个语言环境有差异。

其实这个就是一个分组的求差,不过你那个结果值没看明白和数据的关系。

select ID,max(time)-min(time) from table group by ID

大致就是这样,计算min和max差值有些环境需要使用函数。

追问

如果在ID=1时 STATE 1和0 间隔出现,怎么样能分成组,不要仅仅是两组。谢谢。

追答

楼下两位的回答都没问题,我开始回复的时候没有注意到。
间隔出现的话,因为每个记录都是单独记录准确时间,可以认为state0记录是无效的或者没有的。不影响运行结果。
如果是MSSQL,古舟蓑笠翁的语句可以直接使用,如果是ACCESS,殇忄路的应该可以直接使用,我就不再给出语句了。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-10-04
SELECT ID,DATEDIFF(n,MIN(TME),MAX(TIME)) AS ConTIME

FROM 表
WHERE STATE=1
GROUP BY ID本回答被提问者采纳
第2个回答  2014-11-28
SELECT AA.ID, (MAX(AA.TIME) - MIN(AA.TIME)) CONTIME
FROM TABLE_NAME AA
WHERE AA.STATE <> 0
GROUP BY AA.ID;追问

我问的不好,比如
ID TIME STATE
1 01:01 1
1 01:02 1
1 01:03 0
1 01:04 1
1 01:05 1
1 01:06 0

相似回答