You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server查询:筛选列表中'b'后紧跟'e'的序列并剔除其余行

如何在SQL Server中筛选值为'b'且下一个值为'e'的序列

嘿,我来帮你搞定这个SQL查询需求!要筛选出值为'b'且紧随其后的行值为'e'的序列,同时剔除其他不符合条件的行,我们可以用SQL Server的窗口函数LEAD()和LAG()来实现,这两个函数能轻松获取当前行的下一行或上一行的值。

核心思路

首先得明确:要确定“下一个值”,必须有一个可靠的排序字段(比如自增ID、时间戳等),不然数据库无法保证行的顺序,结果会不准确。假设你的表名为your_table,数据列是value,排序字段是id,接下来分两种场景给出方案:


场景1:保留'b'和它后面的'e'两行

如果你想把符合条件的连续两行('b'和对应的'e')都保留下来,可以用下面的查询:

WITH ranked_data AS (
    SELECT 
        id,
        value,
        -- 获取当前行的下一个值
        LEAD(value) OVER (ORDER BY id) AS next_value,
        -- 获取当前行的上一个值
        LAG(value) OVER (ORDER BY id) AS prev_value
    FROM your_table
)
SELECT id, value
FROM ranked_data
WHERE 
    -- 筛选值为'b'且下一个值是'e'的行
    (value = 'b' AND next_value = 'e')
    -- 同时筛选值为'e'且上一个值是'b'的行
    OR (value = 'e' AND prev_value = 'b');

场景2:只保留值为'b'且下一个值是'e'的行

如果只需要保留那些后面跟着'e'的'b'行,用这个简化版查询即可:

WITH ranked_data AS (
    SELECT 
        id,
        value,
        LEAD(value) OVER (ORDER BY id) AS next_value
    FROM your_table
)
SELECT id, value
FROM ranked_data
WHERE value = 'b' AND next_value = 'e';

举个例子

假设你的表数据是这样的:

idvalue
1a
2b
3e
4c
5b
6f
  • 场景1的查询结果会返回id=2(b)和id=3(e)两行
  • 场景2的查询结果只会返回id=2(b)这一行

内容的提问来源于stack exchange,提问作者manoj yadla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:21:27