Sql 使用另一个表作为输入放弃表中的数据块
我有一张每分钟测量值的表格。第一列是时间,它是我的表的主键。这个时间序列中没有间隔,所以对于第一行到最后一行的时间跨度,我每分钟有一组测量值。将此表命名为Sql 使用另一个表作为输入放弃表中的数据块,sql,sqlite,Sql,Sqlite,我有一张每分钟测量值的表格。第一列是时间,它是我的表的主键。这个时间序列中没有间隔,所以对于第一行到最后一行的时间跨度,我每分钟有一组测量值。将此表命名为实验。让第一次为t_0,第二次为t_1,依此类推 现在,在另一个表中说坏值,我有一组偶尔出现的坏值(时间也是坏值的主键) 现在我想创建一个视图,比如说filtered,具有以下属性:视图应该包含实验中的数据,时间块t_10;(10*n),t_10;(10*n+1),长度为10分钟。为了便于论证,将这样一个块命名为B\n。如果任何时间值t(10*
实验
。让第一次为t_0
,第二次为t_1
,依此类推
现在,在另一个表中说坏值
,我有一组偶尔出现的坏值(时间也是坏值
的主键)
现在我想创建一个视图,比如说filtered
,具有以下属性:视图应该包含实验中的数据,时间块t_10;(10*n)
,t_10;(10*n+1)
,长度为10分钟。为了便于论证,将这样一个块命名为B\n
。如果任何时间值t(10*n)
,…,t(10*n+1])
包含在坏数据中,则应从视图中丢弃块B\n
换句话说:我想过滤掉包含坏数据的时间块
我的第一次尝试是定义一个功能类似于掩码的表,即包含应包含在filtered
中的所有时间
在SQL中,尤其是在SQLite3中,如何实现这一点(创建这样的掩码)?或者说,一开始不使用掩码的想法是错误的吗?要忽略整个博客,可以使用exists
条件
SELECT * FROM experiment e
WHERE not exists (
SELECT * FROM bad_values b
WHERE ((e.time_value - 1) / 10) == ((b.time_value - 1) / 10)
通过计算“(time_value-1)/10”,您可以得到所需的类,因此只排除整个类
要仅获取最佳时间值,可以在单个select语句中执行此操作:
select time_value from experiment
except
select time_value from bad_values
这将为您提供所有过滤后的时间值,您可以在另一个查询的中使用这些值。或者,您也可以根据需要将所有值插入到新表中
编辑:
要从实验中删除错误值,只需运行
delete from experiment where time_value in (select time_value from bad_values)
这不是问题所在。如果其中一个时间值不好,我想丢弃它们。@Sh4pe是否要从实验表中删除它们?或者在另一个查询中忽略它们?-我后来理解了,但是如果你想删除它们,你可以检查我的更新答案。我想最终删除它们,但是我想再次删除它们的整个块(连续10分钟块),如果发现块中的这些值之一是错误的值。好的,抱歉,我不知何故跳过了这一部分-我想使用exists
关键字它应该会起作用这更接近解决方案,但我不想删除距离错误值10分钟的所有测量值。我只想删除包含它的块。示例:在第11分钟有一个错误值(唯一一个)。我想在第1分钟到第10分钟保持挡块,在第11分钟到第20分钟放弃挡块,在第21分钟到第30分钟保持挡块,并保持所有其他挡块。。。重点是我想保留第2,3分钟的值,9, 10.