假设我有x个车站。他们每隔x分钟向我发送一些值。现在我想读取每个站点的最后一个值
我现在所拥有的是:
SELECT Umweltdaten.id,Umweltdaten.Temperatur,Umweltdaten.DatumZeit, Umweltdaten.gerateID
FROM Umweltdaten
LEFT JOIN Gerate ON Gerate.gerateID = Umweltdaten.gerateID
ORDER BY Umweltdaten.DatumZeit DESC
这里的问题是它赋予了我所有的价值
但是我需要将其限制为站数。电台在另一个表中列出
类似这样的事情。但这给了我一个语法错误。在限制范围内
SELECT Umweltdaten.id,Umweltdaten.Temperatur,Umweltdaten.DatumZeit, Umweltdaten.gerateID
FROM Umweltdaten
LEFT JOIN Gerate ON Gerate.gerateID = Umweltdaten.gerateID
ORDER BY Umweltdaten.DatumZeit DESC
LIMIT (SELECT COUNT(gerateID) FROM Gerate);
这样我就得到了输出
也许有人可以解决我的问题。
注意:我不想对LIMIT函数进行硬编码,因为站号可能会有所不同。我正在使用phpmyadmin。
答案 0 :(得分:2)
我假设“ gerate”是您的电台ID
SELECT
t.*
FROM
umweltdaten t
INNER JOIN
(SELECT max(id) as id FROM umweltdaten GROUP BY gerateid) u
on t.id = u.id
工作原理: 希望您的ID是自动递增的int。这意味着任何给定gerateid的最大id是最新记录。我们按gerateid分组,然后选择最大id *。因此,内部联接仅将记录过滤为每个站点具有最大id的记录,从而得出的结果集是每个站点的最新记录
*因为id是主键,所以我们不需要其他任何东西-例如,如果pk是一个GUID(本质上是一个随机数),则选择最大ID是行不通的。我们需要选择gerateid和max date并同时加入。
在任何每组最多n个查询中,我们基本上都必须找到一种仅获取最大记录的方法。通常,在进行分组操作时,除了将其限定为分组中的最大值(最大id,最大日期等)的东西外,我们无法导入其他任何数据,因此我们必须将分组操作作为子项进行查询,获取最大记录,然后将代表最大记录的数据加入表中,以检索我们想要的其余数据
有很多方法可以做到这一点,而我最喜欢的方法之一是使用行号分析查询,但在MySQL中不可用
答案 1 :(得分:0)
为什么在联接条件中使用“ Gerate”,因为您没有在select语句中使用
您将需要像这样的预备语句-
<div>{{ data.yourKey }}</div>