2016-09-30 74 views
0

我有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变量。我有这张表:

+-----------------------------------+---------+---------------------+ 
| 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     | 
+----------------------------------+---------+----------------------+ 

仅选择最后一个(data_ora是日提交的时间戳)的值(valore)与每个corrispondending QEV值接合。

+0

该表是否有ID列?您的预期输出仅显示任何有关valore> 0的地方? –

+0

不,我没有id列。请阅读更新。 – Polarix

回答

0

我不知道whee的QEV会进来,而是要选择最recen时间戳,使用值:

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 
+0

QVE来自某个表格。请阅读更新。 – Polarix

+0

Polarix这几乎工作,你只需要修复最后的声明 - 例如AND(REPLACE(A1.NAME,'AN_S','')= REPLACE(A2.NAME,'QEV','')) - –

相关问题