2016-09-30 2 views
0

У меня есть 3 контейнера для хранения (AN_S1, AN_S2, AN_S3). Я прочитал из ПЛК их вес и состояние их инвертора двигателя (QEV1, QEV2, QEV3 [0 = ВЫКЛ, 1 = ВКЛ]).Выберите последние значения и присоединитесь к одной таблице

valore = вес для контейнеров (S1, S2, S3); [0-1] для инверторов (QEV1, QEV2, QEV3) data_ora - это метка времени.

Итак, каждые 5 минут я читаю переменные ПЛК. И у меня есть эта таблица:

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

Стол имеет столбец идентификатора? Ваш ожидаемый результат показывает только, где какая-либо связанная 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', '')) - –

Смежные вопросы