查看选择中的所有行是不是符合条件

Posted

技术标签:

【中文标题】查看选择中的所有行是不是符合条件【英文标题】:Seeing if all rows in selection match criteria查看选择中的所有行是否符合条件 【发布时间】:2021-04-14 11:19:12 【问题描述】:

首先,让我先说我在 SQL 方面很糟糕,所以我很抱歉。

这是我需要达到的目标。

我在一个表格中有数据,假设它看起来像:

timestamp value1 value2 value3
2021-04-14T100:00:01.000Z 1 1 1
2021-04-14T100:00:02.000Z 1 1 1
2021-04-14T100:00:03.000Z 1 1 1
2021-04-14T100:00:04.000Z 1 1 1
2021-04-14T100:00:05.000Z 1 1 0
2021-04-14T100:00:06.000Z 1 1 1

我正在处理一些 IOT 数据,可以说大约 1 秒的间隔。它不会总是精确到 1 秒。

我想从当前时间戳中提取所有记录并说 2 秒前。所以,在这种情况下,为了争论,让我们从 2021-04-14:00:00:04 开始。

查询应该提取值都高于 0 的前 3 个查询。它看起来像:

   Select * from table 
      WHERE DateAdd(seconds, -3, "2021-04-14T00:00:03) AND
      value 1 > 0 AND value2 > 0 AND value3 > 0 

这很好,将返回前三行。我要挂断的是我想要一种方法来确定返回的所有行是否都符合条件。

因此,如果将相同的查询附加到从 06 开始:

   Select * from table 
      WHERE DateAdd(seconds, -3, "2021-04-14T00:00:06) AND
      value 1 > 0 AND value2 > 0 AND value3 > 0 

它只会返回 2 行而不是 3 行。我不确定如何确定中间有没有包含的行,除了执行另一个实际上是相反的查询然后比较计数。

我想我只是在寻找一种更聪明的方法来做到这一点。

非常感谢任何和所有建议。

【问题讨论】:

WHERE DateAdd(seconds, -3, "2021-04-14T00:00:06) .. 这应该怎么做?这里没有条件 sorry... 应该在其后添加一个 BETWEEN 0 AND 3。 【参考方案1】:

不确定我是否完全理解你,但你可以使用 ORDER BY 和 TOP

SELECT TOP 3 t.* FROM (
  Select s.* from table s
  WHERE s.timestamp < <<YourTargetDateHere>>
    AND s.value1 > 0 AND s.value2 > 0 AND s.value3 > 0
  ORDER BY s.timestamp DESC) t 

这将首先仅过滤符合所有条件的记录,然后根据您的日期列的降序选择前 3 个。

【讨论】:

谢谢,不幸的是,这不是我需要的。很明显,我解释得不好。但基本上我需要知道,在这种情况下,3 秒后的所有行都符合条件。

以上是关于查看选择中的所有行是不是符合条件的主要内容,如果未能解决你的问题,请参考以下文章

Sublime Text编辑器 过滤所有符合条件的查找行

Sublime Text编辑器 过滤所有符合条件的查找行

Sublime Text编辑器 过滤所有符合条件的查找行

Sublime Text编辑器 过滤所有符合条件的查找行

如何有效地选择符合某些条件的 QTableView 行的子集?

检查所有行是不是符合给定条件