对于家庭自动化仪表板,我试图显示不同房间中不同设备的最新值。我的桌子是这样的表:设备
DeviceID | 地板 | 房间 | 测量更多信息 | 1 | 0 | WC | Room-Temp | … | 2
---|---|---|---|---|
0 | WC | 所需Room-Temp | … | |
3 | 0 | WC | rel。湿度 | … |
… | … | … | … | … |
15 | 1 | 孩子 | Room-Temp | … |
16 | 1 | 孩子 | 所需Room-Temp | … |
1 | 孩子 | rel。湿度 | … |
在MySQL 8+上,我们可以使用ROW_NUMBER()
:
WITH cte AS (
SELECT d.DeviceID, d.Floor, d.Room, d.Measurement, m.Timestamp, m.Value,
ROW_NUMBER() OVER (PARTITION BY d.DeviceID ORDER BY m.Timestamp DESC) rn
FROM devices d
LEFT JOIN messdaten m ON m.DeviceID = d.DeviceID
WHERE Room IN (SELECT Room FROM devices WHERE DeviceID = 1)
)
SELECT DeviceID, Floor, Room, Measurement, Timestamp, Value
FROM cte
WHERE rn = 1
ORDER BY Measurement;