0

我需要有关 SQL 查询的帮助。

我有一个带有“状态”列的表。0 表示关闭,1 表示打开。

不同的用户希望在发生 x 次连续 1 事件后得到通知。

使用 SQL 查询,我如何判断“状态”的最后 x 行是否 = 1?

4

2 回答 2

1

例如,如果您想检查最后 5 个连续行的状态是否等于 1,那么您可以这样做:

SELECT IF(SUM(x.state) = 5, 1, 0) AS is_consecutive 
FROM (
    SELECT state 
    FROM table 
    WHERE Processor = 3
    ORDER BY Status_datetime DESC
    LIMIT 5
) as x

如果is_consecutive = 1,那么,是的,有 5 个最后连续的行state = 1

编辑:正如评论中所建议的那样,您必须ORDER BY在查询中使用才能获取最后 n 行。

为了更准确,因为你有一个时间戳列,你应该使用Status_datetime来对行进行排序。

于 2012-08-01T01:43:16.317 回答
0

您应该能够使用这样的东西(将 中的数字替换HAVINGx您要检查的值):

SELECT Processor, OpenCount FROM
(
  SELECT TOP 10 Processor, DateTime, Sum(Status) AS OpenCount
   FROM YourTable
   WHERE Processor = 3
   ORDER BY DateTime DESC
) HAVING OpenCount >= 10
于 2012-08-01T02:07:29.987 回答