如何在sql server中的特定时间间隔选择记录?

时间:2013-02-08 03:59:08

标签: sql tsql sql-server-2005

我想从每10或15分钟间隔中只选择一条记录,但时间间隔可能不同,我找到了使用tsql解决我的问题的方法,但它的查询执行时间非常长,是否有其他方法可以最小化这个查询?

DECLARE @tb table(pks   bigint)
DECLARE @stdt   datetime
DECLARE @endt   datetime
DECLARE @intervel   int
SET @intervel   =   10
DECLARE @pk_id  bigint
SET @stdt   =   '2013-01-31 16:17:42.000'
SET @endt   =   '2013-01-31 16:46:41.000'
DECLARE @fstat  int
DECLARE @c_Val  bigint
DECLARE @cDate  datetime
SET @fstat  =   0
WHILE @fstat    =   0
begin
    select TOP 1 @pk_id=spliter_2.spliter2_pk_id, @cDate=dt from spliter_2 where dt between @stdt AND @endt ORDER BY dt
    set @stdt   =   (dateadd(minute, @intervel, @cDate))
    IF @c_Val=@pk_id
    begin
        set @fstat  =   -2
    end
    else
begin
        insert INTO @tb(pks)VALUES(@pk_id)
    set @c_Val=@pk_id
    end
end 
SELECT spliter2_pk_id, packet_count, dt FROM spliter_2 where spliter2_pk_id IN (SELECT pks from @tb)

注意,在上表spliter_2中,字段dtdatetimespliter2_pk_idbigint

这是我的表格行

spliter2_pk_id   packet_count   dt
15260   00049   2013-01-31 16:17:42.000
15273   00062   2013-01-31 16:18:43.000
15285   00074   2013-01-31 16:19:43.000
15295   00084   2013-01-31 16:20:43.000
15306   00096   2013-01-31 16:21:44.000
15309   00C55   2013-01-31 16:43:02.000
15322   00C68   2013-01-31 16:44:04.000
15328   00C79   2013-01-31 16:45:07.000
15338   00C99   2013-01-31 16:46:33.000

当@intervel = 9

时,这是我的预期结果
spliter2_pk_id   packet_count   dt
15260   00049   2013-01-31 16:17:42.000
15309   00C55   2013-01-31 16:43:02.000

0 个答案:

没有答案