【发布时间】:2022-12-17 13:10:43
【问题描述】:
对于家庭自动化仪表板,我试图显示不同房间中不同设备的最新值。 我的桌子看起来像这样 表:设备
| DeviceID | Floor | Room | Measurement | More Information |
|---|---|---|---|---|
| 1 | 0 | WC | Room-Temp | ... |
| 2 | 0 | WC | Desired Room-Temp | ... |
| 3 | 0 | WC | rel. Humidity | ... |
| ... | .... | ... | .... | ... |
| 15 | 1 | Kid | Room-Temp | ... |
| 16 | 1 | Kid | Desired Room-Temp | ... |
| 17 | 1 | Kid | rel. Humidity | ... |
除此之外,我有一个表“messdaten”(=测量值),我在其中存储收集的数据(DeviceID+Timestamp 是唯一的)。
| DeviceID | Timestamp | Value |
|---|---|---|
| 3 | 2022-07-28 13:00:03 | 63 |
| 15 | 2022-07-28 12:58:37 | 21.3 |
| 17 | 2022-07-28 12:58:37 | 60 |
| 1 | 2022-07-28 12:55:00 | 20.8 |
| ... | ... | ... |
我现在想要的是这种形式的表格,我可以在其中找到一个特定房间(这里例如“WC”)的每个设备的所有最新数据。
| DeviceID | Floor | Room | Measurement | Timestamp | Value |
|---|---|---|---|---|---|
| 1 | 0 | WC | Room-Temp | 2022-07-28 12:55:00 | 20.8 |
| 2 | 0 | WC | Desired Room-Temp | 2022-07-28 12:53:00 | 20.5 |
| 3 | 0 | WC | rel. Humidity | 2022-07-28 13:00:03 | 63 |
到目前为止,我最接近的方法是:
SELECT devices.DeviceID, Floor, Room, Measurement, max(messdaten.Timestamp), messdaten.Value
FROM devices LEFT JOIN messdaten ON messdaten.DeviceID = devices.DeviceID
WHERE Room = (SELECT Room FROM devices WHERE DeviceID = 1)
GROUP BY devices.DeviceID
ORDER BY `devices`.`Measurement` ASC;
不幸的是,在 Timestamp 中使用“max”仅适用于“Timestamp”列,因此我得到的是最新的时间戳,但不是相应的值。
【问题讨论】:
标签: mysql home-automation