gpt4 book ai didi

mysql - SQL:选择列值从上一行更改的行

转载 作者:IT老高 更新时间:2023-10-28 23:42:30 24 4
gpt4 key购买 nike

假设我有这个(MySQL)数据库,按时间戳递增排序:

Timestamp   System StatusA StatusB 
2011-01-01 A Ok Ok
2011-01-02 B Ok Ok
2011-01-03 A Fail Fail
2011-01-04 B Ok Fail
2011-01-05 A Fail Ok
2011-01-06 A Ok Ok
2011-01-07 B Fail Fail

对于该系统,如何选择 StatusA 从上一行更改的行? StatusB 无关紧要(我在这个问题中展示它只是为了说明每个系统可能有许多连续的行,而 StatusA 不会改变)。在上面的示例中,查询应返回 2011-01-03 行(对于 SystemA,StatusA 在 2011-01-01 和 2011-01-03 之间更改)、2011-01-06、2011-01-07。

查询应该在具有数万条记录的表中快速执行。

谢谢

最佳答案

SELECT a.*
FROM tableX AS a
WHERE a.StatusA <>
( SELECT b.StatusA
FROM tableX AS b
WHERE a.System = b.System
AND a.Timestamp > b.Timestamp
ORDER BY b.Timestamp DESC
LIMIT 1
)

但是你也可以试试这个(在 (System,Timestamp) 上有一个索引:

SELECT System, Timestamp, StatusA, StatusB
FROM
( SELECT (@statusPre <> statusA AND @systemPre=System) AS statusChanged
, System, Timestamp, StatusA, StatusB
, @statusPre := StatusA
, @systemPre := System
FROM tableX
, (SELECT @statusPre:=NULL, @systemPre:=NULL) AS d
ORDER BY System
, Timestamp
) AS good
WHERE statusChanged ;

关于mysql - SQL:选择列值从上一行更改的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6560000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com