create table 表a
(Bvisitor varchar(5), [Datetime] Datetime)
insert into a
select 'aaaa','1994-03-01'
union all select 'aaaa','1998-02-01'
union all select 'aaaa','1999-03-01'
union all select 'aaaa','1995-02-01'
union all select 'aaaa','1995-01-02'
union all select 'aaaa','1998-09-01'
union all select 'aaaa','1995-03-01'
union all select 'aaaa','1995-04-02'
union all select 'aaaa','1995-06-01'
union all select 'aaaa','1995-05-02'
union all select 'bbbb','1995-06-01'
union all select 'bbbb','1995-05-02'我现在要写个存储过程,我在.net中定时调用这个存储过程,发现表里面有Bvisitor有相同的数据我只留最进的8条记录,如果没达到8条就不删除 

解决方案 »

  1.   

    declare @a table 
    (Bvisitor varchar(5), [Datetime] Datetime)
    insert into @a
    select 'aaaa','1994-03-01'
    union all select 'aaaa','1998-02-01'
    union all select 'aaaa','1999-03-01'
    union all select 'aaaa','1995-02-01'
    union all select 'aaaa','1995-01-02'
    union all select 'aaaa','1998-09-01'
    union all select 'aaaa','1995-03-01'
    union all select 'aaaa','1995-04-02'
    union all select 'aaaa','1995-06-01'
    union all select 'aaaa','1995-05-02'
    union all select 'bbbb','1995-06-01'
    union all select 'bbbb','1995-05-02'
    select top 8 Bvisitor,max(datetime) as [datetime] from @a group by Bvisitor;
      

  2.   

    create table gssg(Bvisitor varchar(5), [Datetime] Datetime)
    insert into gssg
    select 'aaaa','1994-03-01'
    union all select 'aaaa','1998-02-01'
    union all select 'aaaa','1999-03-01'
    union all select 'aaaa','1995-02-01'
    union all select 'aaaa','1995-01-02'
    union all select 'aaaa','1998-09-01'
    union all select 'aaaa','1995-03-01'
    union all select 'aaaa','1995-04-02'
    union all select 'aaaa','1995-06-01'
    union all select 'aaaa','1995-05-02'
    union all select 'bbbb','1995-06-01'
    union all select 'bbbb','1995-05-02'select * from gssg a where  [datetime] in(select top 8 [Datetime] from gssg where bvisitor=a.bvisitor)
      

  3.   

    create table #a
    (Bvisitor varchar(5), [Datetime] Datetime)
    insert into #a
    select 'aaaa','1994-03-01'
    union all select 'aaaa','1998-02-01'
    union all select 'aaaa','1999-03-01'
    union all select 'aaaa','1995-02-01'
    union all select 'aaaa','1995-01-02'
    union all select 'aaaa','1998-09-01'
    union all select 'aaaa','1995-03-01'
    union all select 'aaaa','1995-04-02'
    union all select 'aaaa','1995-06-01'
    union all select 'aaaa','1995-05-02'
    union all select 'bbbb','1995-06-01'
    union all select 'bbbb','1995-05-02'delete from #a
    where rtrim(Bvisitor) + rtrim(datetime)  in
    (select rtrim(Bvisitor) + rtrim(datetime) from
    (select *, (select count(1) from #a t2 where t2.Datetime >= t1.Datetime and t1.Bvisitor=t2.Bvisitor) [_index]
    from #a t1) a where a._index > 8)select * from #a/*
    Bvisitor Datetime                                               
    -------- ------------------------------------------------------ 
    aaaa     1998-02-01 00:00:00.000
    aaaa     1999-03-01 00:00:00.000
    aaaa     1995-02-01 00:00:00.000
    aaaa     1998-09-01 00:00:00.000
    aaaa     1995-03-01 00:00:00.000
    aaaa     1995-04-02 00:00:00.000
    aaaa     1995-06-01 00:00:00.000
    aaaa     1995-05-02 00:00:00.000
    bbbb     1995-06-01 00:00:00.000
    bbbb     1995-05-02 00:00:00.000(10 row(s) affected)
    */
    drop table #a
      

  4.   

    dutguoyi(新鲜鱼排) 能解释一下你写的那个SQL语句吗?
      

  5.   

    dutguoyi(新鲜鱼排)写 SQL语句 删除时如果是时间相同(插入数据剧的分钟相同)他会把这个分钟插入的数据都删除,现在有人又要求精确到秒上,我快不行了