получить максимальное значение из 1 таблицы на основе 3 таблиц

0

У нас есть 3 таблицы. tblMetingen, tblApparaten и tblConfiguraties. Структура таблицы базы данных

tblMetingen содержит все значения измерений с каждого устройства. Каждое устройство отправляет примерно каждые 7 секунд данные в таблицу tblMetingen. Каждое устройство хранится в tblApparaten, и конфигурация с каждого отдельного устройства хранится в tblConfiguraties.

По какой-то причине мы не храним idApparaat в таблице измерений (tblMetingen), но только в tblApparaten теперь у меня проблемы с получением последнего времени обновления для каждого устройства. Приборы только отправляются при подключении шнура питания. Мы знаем, что некоторые клиенты вытаскивают вилку во время отпуска, но нам нужно следить за оборудованием. Поэтому, прежде чем обращаться к клиенту, я хотел бы каждый день создавать отчет с последними данными отправки с каждого устройства, чтобы я мог отслеживать, как долго устройство отключено от сети.

Я использовал следующий запрос, но это занимает много времени. Должен быть более умный способ получить последнее время отправки от каждого устройства.

SELECT a.idApparaat
     , MAX(m.DatumTijd) maxMetingen
  FROM tblApparaten a
  JOIN tblConfiguraties c
    ON c.idApparaat = a.idApparaat 
  JOIN tblMetingen m
    ON c.idSensor = m.idSensor
 GROUP 
    BY a.idApparaat
 ORDER 
    BY a.idApparaat ASC

Плюс мы должны положить idApparaat в таблицу измерений (tblMetingen) или нет?

  • 0
    Не могли бы вы опубликовать объяснение для вашего запроса и информацию об индексах?
  • 0
    См. Meta.stackoverflow.com/questions/333952/…
Показать ещё 1 комментарий
Теги:
join
distinct

1 ответ

0
Лучший ответ

Это означает, что вам нужно оптимизировать ваш запрос. Прежде всего удалите order by clause. В любом случае вы можете начать расследование плана выполнения. обычно помогает группировать до того, как они присоединяются следующим образом:

Select
 *
from

(select  
   idSensor
  , max( DatumTijd)
 from
   tblMetingen
 group by
   tblMetingen.idSensor
) as maxDate 
join tblConfigurates 
  on tblConfigurates.idSensor = maxDate.idSensor
  • 0
    Спасибо, это помогло. Я сделал ошибку, потому что мы храним каждое значение каждого датчика независимо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню