Rod*_*Rod 16 sql t-sql sql-server
我有以下表结构:
Id, Message
1, John Doe
2, Jane Smith
3, Error
4, Jane Smith
Run Code Online (Sandbox Code Playgroud)
有没有办法获取错误记录和周围的记录?即查找所有错误以及它们之前和之后的记录.
Mar*_*ith 13
;WITH numberedlogtable AS
(
SELECT Id,Message,
ROW_NUMBER() OVER (ORDER BY ID) AS RN
FROM logtable
)
SELECT Id,Message
FROM numberedlogtable
WHERE RN IN (SELECT RN+i
FROM numberedlogtable
CROSS JOIN (SELECT -1 AS i UNION ALL SELECT 0 UNION ALL SELECT 1) n
WHERE Message='Error')
Run Code Online (Sandbox Code Playgroud)
WITH err AS
(
SELECT TOP 1 *
FROM log
WHERE message = 'Error'
ORDER BY
id
),
p AS
(
SELECT TOP 1 l.*
FROM log
WHERE id <
(
SELECT id
FROM err
)
ORDER BY
id DESC
)
SELECT TOP 3 *
FROM log
WHERE id >
(
SELECT id
FROM p
)
ORDER BY
id
Run Code Online (Sandbox Code Playgroud)