Sqlite检查一行中的值是不是在没有循环的下一行中的值之间

Posted

技术标签:

【中文标题】Sqlite检查一行中的值是不是在没有循环的下一行中的值之间【英文标题】:Sqlite checking if value in one row is between values in next rows without loopSqlite检查一行中的值是否在没有循环的下一行中的值之间 【发布时间】:2022-01-21 16:41:50 【问题描述】:

假设我有这样的 sql 表:

id |  val_1 | val_2 | 
1  |  50    |  130  | -
2  |  70    |  110  | False
3  |  60    |  135  | True
4  |  40    |  70   | True

...

现在,我想检查 (val_1 50 是否介于 70 和 110 之间) 或 (val_2 130 介于 70 和 110 之间),这给出了 False,而给出 True 的下一行 130 在 60 和 135 之间等等在。窗口函数可以吗?

【问题讨论】:

【参考方案1】:

可以使用lag函数获取上一行:

SELECT id, val_1, val_2,
       LAG(val_1) OVER (ORDER BY id ASC) BETWEEN val_1 AND val_2 OR
       LAG(val_2) OVER (ORDER BY id ASC) BETWEEN val_1 AND val_2
FROM   mytable

【讨论】:

以上是关于Sqlite检查一行中的值是不是在没有循环的下一行中的值之间的主要内容,如果未能解决你的问题,请参考以下文章

Python 3:检查迭代器的下一个值而不进行迭代

在 sqlite 表中插入的记录对于每一行都是相同的

插入sqlite表的记录对于每一行都是相同的

从 Oracle 游标中的下一行获取数据

如何通过索引(而不是 id)在 SQLite 中获取一行

如何使用 C API 检查 SQLite 列中的值是不是为 NULL?