日期:2014-05-18  浏览次数:20525 次

100分--如何剔除不合规律的行?
表结构如下:
online         user         time
      0               f1             t1
      1               f1             t2
      0               f2             t3
      1               f2             t4
      0               f1             t5
      0               f1             t6
      1               f1             t7
      1               f2             t8
      0               f2             t9
      1               f2             t10
      1               f3             t11
      0               f3             t12
      1 f1 t13
      1 f4 t14
      1 f4 t15
      0 f4 t16
      1           f4 t17

说明:表按时间顺序排列,online中0表示上线,1表示下线,time是时间字段。对每个user,正常情况下是先记录上线后记录下线,表中有坏数据是只记录了上线而没有记录下线,或只记录了下线而没有上线。
现在的问题是如何选出正确的上线下线记录(不能删除原表数据)?
如上表,正确选择结果应为:

      0               f1             t1
      1               f1             t2
      0               f2             t3
      1               f2             t4
      0               f1             t6
      1               f1             t7
      0               f2             t9
      1               f2             t10
      0 f4 t16
      1           f4 t17



------解决方案--------------------
--f3两条数据因为按1,0排列,所以是坏记录
declare @t table (online int,[user] varchar(10),time varchar(10))
insert @t select 0, 'f1 ', 't01 '
union all select 1, 'f1 ', 't02 '
union all select 0, 'f2 ', 't03 '
union all select 1, 'f2 ', 't04 '
union all select 0, &#