--假设此表为test,日期字段为riqi
create procedure A(@nTime int, @nNumber int)
as
declare @newdate datetime,@i int
declare @sql varchar(8000)
alter table test add flag int
set @i=1
set @sql=''
select @newdate=max(riqi) from test
update test set flag=1 where riqi=@newdate
while @i<@nNumber
begin
select @newdate=max(riqi) from test where datediff(day,riqi,@newdate)>=@nTime--假设你要取的是天,如是小时,把day改为hour就可以了
update test set flag=1 where riqi=@newdate
set @i=@i+1
end
select * from test where flag=1
alter table test drop column flag
go

解决方案 »

  1.   

    create table #t(id int not null,dt datetime)
    insert into #t
    select 1,'2005-8-1 18:00:32' union
    select 2,'2005-8-1 18:01:04' union
    select 3,'2005-8-1 18:02:32' union
    select 4,'2005-8-1 18:03:04' union
    select 5,'2005-8-1 18:14:32' union
    select 6,'2005-8-1 18:15:04'
    go
    --创建sp
    create procedure p_get(@nTime int,--时间间隔多少秒。
    @nNumber int)
    as
    declare @sql varchar(1000)
    select @sql='select top '+convert(varchar,@nNumber)+' * from #t a where (select top 1 datediff(ss,dt,a.dt) from #t where dt<a.dt order by dt DESC)='+convert(varchar,@nTime)+' order by dt desc'
    exec(@sql)
    goexec p_get 32,2
    /*
    结果 取出记录的时间跟上条记录相差32秒的前两条。
    id dt
    ------------------------
    6 2005-08-01 18:15:04.000
    4 2005-08-01 18:03:04.000
    */
      

  2.   

    create proc procedureA
    @nTime int, 
    @nNumber int
    as
    set rowcount nNumber
    select * from 表
    where datediff(second,录入时间,getdate())%@nTime=0  --间隔以秒为单位
      

  3.   

    create proc procedureA
    @nTime int, 
    @nNumber int
    as
    set rowcount nNumber
    select * from 表
    where datediff(second,录入时间,getdate())%@nTime=0  --间隔以秒为单位
    order by 录入时间 desc --少写了最近的处理
      

  4.   

    老大少写了个"@":create proc procedureA
    @nTime int, 
    @nNumber int
    as
    set rowcount @nNumber
    select * from 表
    where datediff(second,录入时间,getdate())%@nTime=0  --间隔以秒为单位
    order by 录入时间 desc --少写了最近的处理