查看选择中的所有行是不是符合条件
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 秒后的所有行都符合条件。以上是关于查看选择中的所有行是不是符合条件的主要内容,如果未能解决你的问题,请参考以下文章