提取历史记录行的最后状态

用户3368883

我在 MySQL 数据库中tableStatus有 76869 行的表

这 76869 行是每个element的历史记录Code node

在历史上,单曲elementCode node可以改变他的status传球,从status AVAILABLEUNAVAILABLE反之亦然

这是一个例子:

mysql> SELECT
    sis,
    element,
    `Code node`,
    MAX(Datetime),
    Status
FROM
    `tableStatus`
GROUP BY
    element,
    Status
ORDER BY
    MAX(Datetime) DESC;
+------+-------------------+---------------+---------------------+------------------+
| sis  | element           | Code node     | MAX(Datetime)       | Status           |
+------+-------------------+---------------+---------------------+------------------+
| 7605 | ZZ190923:TT214364 | 7605-2-190923 | 2019-01-22 09:02:47 | AVAILABLE        |
| 7604 | ZZ190923:ZZ394525 | 7605-2-190923 | 2019-01-22 09:02:43 | AVAILABLE        |
| 7145 | ZZ073097:TT070936 | 7605-2-190923 | 2018-12-19 15:16:23 | UNAVAILABLE      |
| 7144 | ZZ073097:ZZ072998 | 7605-2-190923 | 2018-12-19 15:16:20 | UNAVAILABLE      |
+------+-------------------+---------------+---------------------+------------------+
4 rows in set

我需要提取最后位置状态,只有当statusUNAVAILABLE每个elementCode node

我曾尝试用WHERE statusUNAVAILABLE,但输出是错误的,因为最后的位置statusCode node“7605-2-190923”是可用,不应该被提取。

mysql> SELECT
    sis,
    element,
    `Code node`,
    MAX(Datetime),
    Status
FROM
    `tableStatus`
WHERE
    `Code node` IN ('7605-2-190923')
AND Status IN ('UNAVAILABLE')
GROUP BY
    element,
    Status
ORDER BY
    MAX(Datetime) DESC;
+------+-------------------+---------------+---------------------+------------------+
| sis  | element           | Code node     | MAX(Datetime)       | Status           |
+------+--- ---------------+---------------+---------------------+------------------+
| 7145 | ZZ073097:TT070936 | 7605-2-190923 | 2018-12-19 15:16:23 | UNAVAILABLE      |
| 7144 | ZZ073097:ZZ072998 | 7605-2-190923 | 2018-12-19 15:16:20 | UNAVAILABLE      |
+------+-------------------+---------------+---------------------+------------------+
2 rows in set

你能帮助我吗 ?

SELECT
    *
FROM
    `tableStatus` A
INNER JOIN
    (
    SELECT
        `Code node`, MAX(Datetime) LastDatetimeForNode
    FROM
        tableStatus
    GROUP BY `Code node`
    ) B ON A.`Code node` = B.`Code node` AND A.`Datetime` = B.`LastDatetimeForNode`
WHERE A.`Status` = 'UNAVAILABLE'
;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章