Sql server 选择一条记录,在它之前抓取“n”条记录,并遍历它们以查看它们是否是连续的

Sql server 选择一条记录,在它之前抓取“n”条记录,并遍历它们以查看它们是否是连续的,sql-server,tsql,Sql Server,Tsql,所以,我想从结果表中获取一个记录。假设这是我们的样本记录 一旦我有了样本记录,我想从表中抓取10个结果,并检查样本是否在这10个结果的列表中是连续的 所以,如果我们的样本记录是124,我想抓取它之前的10条记录,检查它们是否遵循123、122、121、120等顺序 一旦我知道样本结果实际上是连续的10条记录,我想将该记录插入另一个表中保存 我正在使用SQL Server和T-SQL来实现这一点,并且正在努力做到这一点。如果有人能提供任何建议,我将不胜感激。以下是我到目前为止删除的一些数据,不知道

所以,我想从结果表中获取一个记录。假设这是我们的样本记录

一旦我有了样本记录,我想从表中抓取10个结果,并检查样本是否在这10个结果的列表中是连续的

所以,如果我们的样本记录是124,我想抓取它之前的10条记录,检查它们是否遵循123、122、121、120等顺序

一旦我知道样本结果实际上是连续的10条记录,我想将该记录插入另一个表中保存

我正在使用SQL Server和T-SQL来实现这一点,并且正在努力做到这一点。如果有人能提供任何建议,我将不胜感激。以下是我到目前为止删除的一些数据,不知道我是否在正确的轨道上

declare @TestTable as table (a char(15), RowNumber integer)
declare @SampleNumber as char(15)
        
insert into @TestTable (a, RowNumber) 
select top 10 
    [NUMBERS], 
    ROW_NUMBER() over (order by a) as RowNumber 
from [TABLE] 
where 
    [NUMBERS] like [CONDITIONS] 
order by [NUMBERS] desc

通过这个,我试图获取结果和一组行号,允许我基于该行号迭代它们。但是,我在运行时遇到一个无效的列名“a”错误。尽管如此,还是可以忘掉那个错误,写一些全新的东西,因为我甚至不知道自己是否走上了正确的道路

declare @TestTable as table (a char(15), RowNumber integer)
declare @SampleNumber as char(15)
        
insert into @TestTable (a, RowNumber) 
select top 10 
    [NUMBERS], 
    ROW_NUMBER() over (order by a) as RowNumber 
from [TABLE] 
where 
    [NUMBERS] like [CONDITIONS] 
order by [NUMBERS] desc


再次感谢您的帮助。

我不确定这在更大的数据集上的效果如何,但正如Peter Smith所提到的,通过使用lag查看排序窗口中前面的x行的值是什么,这是可能的,不过请注意,这将对表中的所有行运行,并返回所有符合条件的行,而不是随机抽样:

-- Create a not quite sequential dataset
declare @t table(n int);
with n as
(
    select row_number() over (order by (select null)) as n
          ,abs(checksum(newid())) % 14 as r
    from sys.all_objects
)
insert into @t
select n
from n
where r > 2;

-- Output the original dataset
select *
from @t;

-- Only return rows that come after a certain number of sequential numbers
declare @seq int = 10;
with l as
(
    select n
          ,n - lag(n,@seq,null) over (order by n) as l
    from @t
)
select n
from l
where l = @seq;

看看滞后。您的源表需要有一个索引字段,您可以根据该字段进行排序。此外,源表定义和示例数据也会有所帮助