按时间戳和值的 SQLite 查询
Sqlite query by timestamp and value
我有一个 Sqlite
table 包含以下行:
id
: int PK 自增
timestamp
:整数值不为空。数据库插入的时间戳
value
:整数值不为空。可能的值 [0-4].
我想查询数据库以获取数据库中给定时间戳之前 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
我有一个 Sqlite
table 包含以下行:
id
: int PK 自增timestamp
:整数值不为空。数据库插入的时间戳value
:整数值不为空。可能的值 [0-4].
我想查询数据库以获取数据库中给定时间戳之前 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