按时间戳和值的 SQLite 查询

Sqlite query by timestamp and value

我有一个 Sqlite table 包含以下行:

我想查询数据库以获取数据库中给定时间戳之前 60 秒内包含的寄存器的所有值是否都相同 value。例如:

id | timestamp  | value
1  | 1594575090 |   1
2  | 1594575097 |   1
3  | 1594575100 |   1
4  | 1594575141 |   2
5  | 1594575145 |   2
6  | 1594575055 |   3
7  | 1594575060 |   4

在这种情况下,如果我对寄存器3(包括寄存器3)之前60秒包含的寄存器进行预期查询,它应该查询寄存器 [1,2, 3] 相同,应该 return 1.

另一方面,如果此查询是使用寄存器 7 完成的,它将比较寄存器 [4,5,6,7]value 并且它应该 return 0,因为这个值他们三个不一样

关于如何执行此查询的任何猜测?

我想你想要这个:

select count(distinct value) = 1 result
from tablename
where id <= ? 
and timestamp - (select timestamp from tablename where id = ?) <= 60;

? 占位符替换为您想要其结果的 ID。
可能你希望时间戳的差的绝对值小于60,那么如果是这样那就改成:

and abs(timestamp - (select timestamp from tablename where id = ?)) <= 60;

参见demo

嗯。 . .我认为你描述的逻辑是:

select ( min(value) = max(value) ) as all_same
from t cross join
     (select t.*
      from t
      where t.id = ?
     ) tt
where t.timestamp < tt.timestamp and
      t.timestamp >= tt.timestamp - 60