У нас есть 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) или нет?
Это означает, что вам нужно оптимизировать ваш запрос. Прежде всего удалите order by clause. В любом случае вы можете начать расследование плана выполнения. обычно помогает группировать до того, как они присоединяются следующим образом:
Select
*
from
(select
idSensor
, max( DatumTijd)
from
tblMetingen
group by
tblMetingen.idSensor
) as maxDate
join tblConfigurates
on tblConfigurates.idSensor = maxDate.idSensor