mysql - 选择最后一个值并与同一个表连接

标签 mysql sql database

我有 3 个库存容器(AN_S1、AN_S2、AN_S3)。我从 PLC 读取它们的重量和电机逆变器的状态(QEV1、QEV2、QEV3 [0=OFF、1=ON])。

valore = 容器重量(S1、S2、S3); [0-1] 用于逆变器(QEV1、QEV2、QEV3) data_ora 是时间戳。

因此,我每 5 分钟读取一次 PLC 变量。我有这张 table :

+-----------------------------------+---------+---------------------+
| nome                              | valore  | data_ora            |
+-----------------------------------+---------+---------------------+
| AN_S1                             |  3.9725 | 2016-09-06 19:10:05 |
| AN_S2                             |  150.26 | 2016-09-06 19:10:05 |
| AN_S3                             | 207.026 | 2016-09-06 19:10:05 |
|QEV1                               |       0 | 2016-09-06 19:10:05 |
|QEV2                               |       1 | 2016-09-06 19:10:05 |
|QEV3                               |       1 | 2016-09-06 19:10:05 |
|MARCIA_9                           |       0 | 2016-09-06 19:10:05 |
|MARCIA_10                          |       0 | 2016-09-06 19:10:05 |
| AN_S1                             |  0.0005 | 2016-09-06 19:15:06 |
| AN_S2                             |  100.26 | 2016-09-06 19:15:06 |
| AN_S3                             | 977.004 | 2016-09-06 19:15:06 |
|QEV1                               |       0 | 2016-09-06 19:15:06 |
|QEV2                               |       0 | 2016-09-06 19:15:06 |
|QEV3                               |       0 | 2016-09-06 19:15:06 |
| MARCIA_9                          |       0 | 2016-09-06 19:15:06 |
| MARCIA_10                         |       0 | 2016-09-06 19:15:06 |
| AN_S1                             |  367.08 | 2016-09-06 19:20:05 |
| AN_S2                             |   50.26 | 2016-09-06 19:20:05 |
| AN_S3                             |   70135 | 2016-09-06 19:20:05 |
|QEV1                               |       0 | 2016-09-06 19:20:05 |
|QEV2                               |       1 | 2016-09-06 19:20:05 |
|QEV3                               |       1 | 2016-09-06 19:20:05 |
| MARCIA_9                          |       0 | 2016-09-06 19:20:05 |
| MARCIA_10                         |       0 | 2016-09-06 19:20:05 |
+----------------------------------+---------+----------------------+

我想要一个查询来获得这个。对于每个容器,我想要最后更新的重量及其逆变器的状态:

+-----------------------------------+---------+---------------------+
| nome                              | valore  | QEV                 |
+-----------------------------------+---------+---------------------+
| AN_S1                             |  367.08 | 0                   |
| AN_S2                             |  50.26  | 1                   |
| AN_S3                             | 70135   | 1                   |
+----------------------------------+---------+----------------------+

仅选择与每个相应的 QEV 值连接的最后一个(data_ora 是时间戳字段)值 (valore)。

最佳答案

我不知道 QEV 何时出现,但要选择最近时间戳的值,请使用:

select T1.nome, T1.valore, T1.data_ora
from Table1 T1
where data_ora = 
    (select max(T2.data_ora) from Table1 T2 where T1.nome = T2.nome)
and T1.nome like 'AN%'

对于 QEV:

select T3.nome, T3.valore as QEV, T3.data_ora
from Table1 T3
where data_ora = 
    (select max(T4.data_ora) from Table1 T4 where T3.nome = T4.nome)
and T3.nome like 'QEV%'

现在我们加入

select A1.nome, A1.valore, A2.QEV
from (
    select T1.nome, T1.valore, T1.data_ora
    from Table1 T1
    where data_ora = 
        (select max(T2.data_ora) from Table1 T2 where T1.nome = T2.nome)
    and T1.nome like 'AN%'
) A1
inner join (
    select T3.nome, T3.valore as QEV, T3.data_ora
    from Table1 T3
    where data_ora = 
        (select max(T4.data_ora) from Table1 T4 where T3.nome = T4.nome)
    and T3.nome like 'QEV%'
) A2
    on A1.data_ora = A2.data_ora

关于mysql - 选择最后一个值并与同一个表连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39786371/

相关文章:

java - 实现多个表的 JOIN

sql - 当另一个表中的特定行已被删除时,从表中删除行

mysql - PHPMyAdmin 使用特殊符号检索数据

Python 基于磁盘的字典

如果表中存在行,MySQL 将创建一个总和

mysql - 更改整个数据库的排序规则并解决非法的排序规则混合

mysql - $ mysql -u root -p -h 127.0.0.1 输入密码 : ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)

php - 使用表单中的多个字段搜索 MySQL

php - 返回 MySQL 查询结果时显示 "x results found"或 "no results found"

mysql - 嵌套 SQL 查询在 MySql 中以不同形式运行时抛出错误