假设我有 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
这里的问题是它给了我所有的值(value)
但是我需要限制电台的数量。电台在另一个表中列出
类似这样的事情。但它给了我一个语法错误。与 Limit 一致
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。
最佳答案
我假设“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(本质上是一个随机数),那么选择最大的一个将不起作用。我们需要选择例如 gerateid 和 max date 并加入两者。
在任何每组最大n个查询中,我们基本上必须找到一种方法来仅获取最大记录。通常,当我们进行组操作时,除了将其限定为组中最大值的数据(最大 ID、最大日期等)之外,我们不能引入任何数据,因此我们必须将组操作作为子操作来进行查询,获取最大记录,然后将代表最大值的数据连接起来,返回到表中检索我们想要的其余数据
有很多方法可以做到这一点,我最喜欢的方法之一是使用行号分析查询,但它在 MySQL 中不可用
关于mysql - 在主 SELECT 之后使用 SELECT COUNT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52904495/