sqlite 从给定值的SQL查询中提取行

pdsfdshx  于 2022-11-15  发布在  SQLite
关注(0)|答案(3)|浏览(205)

c按升序排列,如下所示。
假设我有一个值x = 25;我想提取与c列对应的25行。很明显,25位于第2行和第3行之间。
如何从SQL查询中提取第2行和第3行?
A|b|c
-|-|
100|200|5
700|2000|20
600|110|100

ygya80vv

ygya80vv1#

好好利用它。

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

此外,如果不想将25作为参数传递,可以将其作为列添加到表/视图中
test it

g0czyy6m

g0czyy6m2#

使用NOT EXISTS

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)
          );

?替换为所需的值。
? = 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

jutyujz0

jutyujz03#

找出小于或等于25的所有值。然后按c排序,取第一个。
对于大于25的c,再做一次。
您可以执行两个查询,union

select *
from table
where c <= 25
order by c desc
limit 1

union

select *
from table
where c > 25
order by c asc
limit 1

相关问题