用于比较表项和检测缺失数据(超出阈值)的sql查询

用于比较表项和检测缺失数据(超出阈值)的sql查询,sql,sqlite,Sql,Sqlite,我正在运行一个科学测试,并将数据记录在两个sqlite表中 我需要分析测量结果并创建第三个表格视图,其中包含以下几点: 1-表中的条目完全独立且相互无关。 TX侧的id显示测试编号 2-对于表1中TX侧的每个测试,表2中RX侧可能有相应的条目 2-1-这两个表之间的关系如何? 对于我进行的每个测试,即从TX侧发送一个数字,我希望在RX侧接收一个数字,最大延迟为1.5秒。 延迟超过该阈值的任何条目都应视为未命中/空 问题: 我应该如何在SQLITE中编写sql查询以生成表3中给出的分析和测试结果

我正在运行一个科学测试,并将数据记录在两个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