WITH temp as (SELECT a, b, c
, min( CASE WHEN 25 < c THEN c ELSE NULL END ) OVER ( ORDER BY c ) AS col1
, max( CASE WHEN 25 < c THEN NULL ELSE c END ) OVER ( ORDER BY c DESC ) AS col2
FROM data
ORDER BY c)
SELECT a,b,c
FROM temp t
WHERE t.col1 = t.c
OR t.col2 = t.c
SELECT t1.*
FROM tablename t1
WHERE NOT EXISTS (
SELECT *
FROM tablename t2
WHERE t2.c <> t1.c
AND (t2.c BETWEEN t1.c AND ? OR t2.c BETWEEN ? AND t1.c)
);
3条答案
按热度按时间ygya80vv1#
好好利用它。
此外,如果不想将25作为参数传递,可以将其作为列添加到表/视图中
test it
g0czyy6m2#
使用
NOT EXISTS
:将
?
替换为所需的值。? = 25
的结果:A|b|c
-|-|
700|2000|20
600|110|100
? = 20
的结果:A|b|c
-|-|
700|2000|20
? = 4
的结果:A|b|c
-|-|
100|200|5
? = 110
的结果:A|b|c
-|-|
600|110|100
请参阅demo。
jutyujz03#
找出小于或等于25的所有值。然后按c排序,取第一个。
对于大于25的c,再做一次。
您可以执行两个查询,
union
。