使用另一个表作为输入丢弃表中的数据块

时间:2014-02-19 14:16:51

标签: sql sqlite

我有一张表,每分钟都有测量值。第一列是时间,它是我表的主键。这个时间序列没有间隙,所以对于第一行到最后一行的时间跨度,我每分钟都有一组测量值。将此表命名为experiment。第一次为t_0,第二次为t_1,依此类推......

现在,在另一个表bad_values中,我有一组偶尔出现的错误值(时间也是bad_values的主键)。

现在我想创建一个视图,比如说filtered,其中包含以下属性:视图应包含来自experiment的时间段t_(10*n)t_(10*n + 1)中的数据,...,t(10*[n+1])长度为10分钟。为了论证,让这样一个块命名为B_n。如果B_n中包含t_(10*n),...,t(10*[n+1])的任何时间值,则应从视图中删除块bad_data

换句话说:我想过滤掉包含错误数据的时间块。

我的第一次尝试是定义一个功能类似于掩码的表,即包含应该包含在filtered中的所有时间的表。

如何在SQL中实现这一点(创建这样的掩码),尤其是SQLite3?或者首先使用面具不好的想法?

1 个答案:

答案 0 :(得分:1)

要忽略整个博客,您可以使用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

这将为您提供所有已过滤的时间值,您可以在其他查​​询的FROM中使用此值。或者您可以使用它将所有值插入到新表中,如您所愿。

修改

要从实验中删除错误值,您可以简单地使用

delete from experiment where time_value in (select time_value from bad_values)