表如下
ID USER OP
1  A    进入
2  A    退出
3  A    进入
4  B    进入
5  C    进入
6  D    进入
7  C    退出
8  C    进入如果要删除那些进入后退出了的记录,保留那些进入没退出的记录该怎么写SQL语句?

解决方案 »

  1.   


    create table tb(ID int, [USER] varchar(2), OP varchar(10))
    go
    insert  into tb  select 
    1 , 'A',    '进入' union all select 
    2 , 'A',    '退出' union all select 
    3 , 'A',    '进入' union all select 
    4 , 'B',    '进入' union all select 
    5 , 'C',    '进入' union all select 
    6 , 'D',    '进入' union all select 
    7 , 'C',    '退出' union all select 
    8 , 'C',    '进入'
    delete 
    from tb
    where id not in(select id 
    from tb
    where id  in 
    (select max(id) 
    from tb
    group by [user]) and op ='进入')
      

  2.   

    delete  
    from tb b
    where  id not in (select max(a.id)
    from tb a 
    where a.[user]=b.[user]
    and  a.op ='进入' 
     )