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

如何通过SQL查询提取特定值在升序c列中所处区间的对应行

问题描述

已知某表(假设表名为your_table)的c列已按升序排列,数据如下:

abc
1002005
700200020
600110100

给定值x = 25,需要提取c列中25所处区间对应的行(即第2、3行),如何用SQL实现?


实现方法

方法1:通过分界值筛选

先找到小于x的最大c值,以及大于x的最小c值,再筛选这两个值对应的行:

SELECT a, b, c
FROM your_table
WHERE c IN (
    -- 取小于25的最大c值
    SELECT MAX(c) FROM your_table WHERE c < 25,
    -- 取大于25的最小c值
    SELECT MIN(c) FROM your_table WHERE c > 25
);

方法2:用窗口函数判断区间

利用LAG和LEAD窗口函数获取前后行的c值,判断当前行是否属于x所在的区间:

SELECT a, b, c
FROM (
    SELECT 
        a, b, c,
        -- 获取前一行的c值
        LAG(c) OVER (ORDER BY c) AS prev_c,
        -- 获取后一行的c值
        LEAD(c) OVER (ORDER BY c) AS next_c
    FROM your_table
) t
WHERE 
    -- 匹配区间左端点(当前c小于x,后一行c大于等于x)
    (c < 25 AND next_c >= 25) 
    -- 匹配区间右端点(前一行c小于x,当前c大于等于x)
    OR (prev_c < 25 AND c >= 25);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:45:35