用于比较表项和检测缺失数据(超出阈值)的sql查询
我正在运行一个科学测试,并将数据记录在两个sqlite表中 我需要分析测量结果并创建第三个表格视图,其中包含以下几点: 1-表中的条目完全独立且相互无关。 TX侧的id显示测试编号 2-对于表1中TX侧的每个测试,表2中RX侧可能有相应的条目 2-1-这两个表之间的关系如何? 对于我进行的每个测试,即从TX侧发送一个数字,我希望在RX侧接收一个数字,最大延迟为1.5秒。 延迟超过该阈值的任何条目都应视为未命中/空 问题: 我应该如何在SQLITE中编写sql查询以生成表3中给出的分析和测试结果 先谢谢你用于比较表项和检测缺失数据(超出阈值)的sql查询,sql,sqlite,Sql,Sqlite,我正在运行一个科学测试,并将数据记录在两个sqlite表中 我需要分析测量结果并创建第三个表格视图,其中包含以下几点: 1-表中的条目完全独立且相互无关。 TX侧的id显示测试编号 2-对于表1中TX侧的每个测试,表2中RX侧可能有相应的条目 2-1-这两个表之间的关系如何? 对于我进行的每个测试,即从TX侧发送一个数字,我希望在RX侧接收一个数字,最大延迟为1.5秒。 延迟超过该阈值的任何条目都应视为未命中/空 问题: 我应该如何在SQLITE中编写sql查询以生成表3中给出的分析和测试结果
Table (1) TX
id | time | measurement
------------------------
1 | 09:40:10.221 | 100
2 | 09:40:15.340 | 60
3 | 09:40:21.100 | 80
4 | 09:40:25.123 | 90
5 | 09:40:29.221 | 45
Table (2) RX
time | measurement
------------------------
09:40:10.521 | 100
09:40:21.560 | 80
09:40:26.210 | 90
09:40:30.414 | 50
Table (3) Test Result
id | delta_time(s)| delta_value
----------------------------------------
1 | 0.300 | 0
2 | NULL | NULL (i.e. missed)
3 | 0.460 | 0
4 | 1.087 | 0
5 | 1.193 | 5
您可以使用相关子查询:
select tx.*,
(select rx.measurement - tx.measurement
from rx
where rx.time >= tx.time and
rx.time < datetime(tx.time, '+1.5 seconds')
limit 1 -- in case there is more than one
) delta_value
from tx;
根据您的条件加入表格,并使用窗口函数MIN和FIRST_值: 看。 结果:
正确的答案和一个工作演示完成。感谢百万次的快速响应注意:窗口函数在sqlite版本>=3.25中工作。这个答案也是正确的,解决了我的问题。谢谢你的快速回复。如果您使用的是sqlite版本,它会特别有用。@qwa。这可能具有更好的性能,因为它消除了重复项的删除。
select distinct
t.id,
round(min((julianday(r.time) - julianday(t.time)) * 24 * 60 * 60) over (partition by id), 3) [delta_time(s)],
first_value(r.measurement - t.measurement) over (partition by id order by (julianday(r.time) - julianday(t.time))) [delta_value]
from TX t left join RX r
on (julianday(r.time) - julianday(t.time)) * 24 * 60 * 60 between 0 and 1.5;
> id | delta_time(s) | delta_value
> -: | ------------: | ----------:
> 1 | 0.3 | 0
> 2 | null | null
> 3 | 0.46 | 0
> 4 | 1.087 | 0
> 5 | 1.193 | 5