如何在给出之前获得N条记录?
我有以下表结构:
Id, Message
1, John Doe
2, Jane Smith
3, Error
4, Jane Smith
5, Michael Pirs
7, Gabriel Angelos
8, Error
Run Code Online (Sandbox Code Playgroud)
有没有办法在每个错误之前获取N条记录并加入所有这些记录?因此,N = 2的预期结果将是
1, John Doe
2, Jane Smith
5, Michael Pirs
7, Gabriel Angelos
Run Code Online (Sandbox Code Playgroud)
如果您的 Id 不能无间隙递增,则需要创建行号列。distinct然后您可以使用简单的连接来查找前一个 N。您的前一个 N 可能会重叠...因此,如果您不想重复,则必须添加。
declare @N as integer
set @N=2
;with cte_tbl (Id, Message, rownum) AS
(
select *, ROW_NUMBER() over (order by id) as rownum from test
)
select distinct Prev.Id, Prev.Message
from cte_tbl
join cte_tbl Prev
on Prev.rownum between cte_tbl.rownum-@N and cte_tbl.rownum-1
where cte_tbl.Message = 'Error'
and Prev.Message <> 'Error'
order by Prev.Id
Run Code Online (Sandbox Code Playgroud)
如果之前的记录之一@N是错误的,则“错误”记录将不会显示。如果您确实希望包含这些内容,则必须对此进行修改。只需简单地移除该线即可and Prev.Message <> 'Error'。
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |