如何筛选前一行值为'T'且当前行值为'C'的ID数据行?
可以实现这类筛选需求
要筛选出当前行column1值为'C'且紧邻前一行column1值为'T'的记录ID,核心是利用窗口函数获取前一行的字段值,再进行条件过滤。
通用SQL实现方案
大多数主流数据库(MySQL 8.0+、PostgreSQL、SQL Server、Oracle等)都支持LAG()窗口函数,它可以获取当前行之前指定偏移量的行数据。假设你的表名为your_table,SQL语句如下:
SELECT ID FROM ( SELECT ID, column1, -- 获取当前行的前一行column1值,通过column2确保行顺序符合业务逻辑 LAG(column1) OVER (ORDER BY column2) AS prev_column1 FROM your_table ) AS subquery WHERE column1 = 'C' AND prev_column1 = 'T';
关键说明
ORDER BY column2:这里用column2(即示例中的日期字段)来保证行的顺序是按时间先后排列的,这样才能准确匹配紧邻的前一行。如果你的表有其他更合适的排序依据(比如自增主键),可以替换为对应的字段。- 子查询先计算每行对应的前一行
column1值,外层查询再筛选符合条件的行并提取ID。
针对示例表的执行结果
根据你提供的示例数据,执行上述SQL后会返回ID为3的记录——因为ID=3的最后一行是'C',它的前一行是'T',符合筛选条件;而ID=1的'C'前一行是'J',ID=2的'C'前一行是'J',均不满足条件。
内容的提问来源于stack exchange,提问作者InvisibleInk
相关产品推荐
相关产品推荐

