Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用另一个表作为输入放弃表中的数据块_Sql_Sqlite - Fatal编程技术网

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.