【问题标题】:get max value from 1 table based on 3 tables根据 3 个表从 1 个表中获取最大值
【发布时间】:2018-02-27 09:20:58
【问题描述】:

我们有 3 张桌子。 tblMetingen、tblApparaten 和 tblConfiguraties。 Database table structure

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) 中?

【问题讨论】:

  • 您能否为您发布有关索引的查询和信息的解释?
  • tblApparaten 上的索引是 idApparaat,tblConfiguraraties 上的索引是 idSensoren,idMetingen 上的索引是 idMetingen。希望这是您一直在寻找的答案。我确实看到没有人设置其他字段的索引...

标签: mysql sql join distinct


【解决方案1】:

这意味着您需要优化您的查询。 首先删除 order by 子句。您可以开始调查执行计划的任何方式。 通常有助于在任何加入之前进行分组:

Select
 *
from

(select  
   idSensor
  , max( DatumTijd)
 from
   tblMetingen
 group by
   tblMetingen.idSensor
) as maxDate 
join tblConfigurates 
  on tblConfigurates.idSensor = maxDate.idSensor

【讨论】:

  • 感谢您的帮助。我犯了一个错误,因为我们独立存储每个传感器的每个值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-08
相关资源
最近更新 更多