如何通过SQL查询提取特定值在升序c列中所处区间的对应行
问题描述
已知某表(假设表名为your_table)的c列已按升序排列,数据如下:
| a | b | c |
|---|---|---|
| 100 | 200 | 5 |
| 700 | 2000 | 20 |
| 600 | 110 | 100 |
给定值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
相关产品推荐
相关产品推荐

