我有一个数据量很大的表 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,殇忄路的应该可以直接使用,我就不再给出语句了。
我问的不好,比如
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