我有 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/