我需要有关 SQL 查询的帮助。
我有一个带有“状态”列的表。0 表示关闭,1 表示打开。
不同的用户希望在发生 x 次连续 1 事件后得到通知。
使用 SQL 查询,我如何判断“状态”的最后 x 行是否 = 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
来对行进行排序。
您应该能够使用这样的东西(将 中的数字替换HAVING
为x
您要检查的值):
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