在主选择之后使用select count

pn9klfpd  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(302)

假设我有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);

所以我得到这个输出

也许有人能解决我的问题。
注意:我不想硬编码限制函数,因为站号可能不同。我用的是phpmyadmin。

qkf9rpyu

qkf9rpyu1#

为什么在join条件中使用“gerate”,因为在select语句中没有使用
你需要准备好这样的陈述-

SELECT COUNT(gerateID) into @limitcount FROM Gerate
PREPARE STMT FROM 'SELECT Umweltdaten.id,Umweltdaten.Temperatur,Umweltdaten.DatumZeit, Umweltdaten.gerateID
FROM Umweltdaten LIMIT ?';
EXECUTE STMT USING @limitcount ;
qlfbtfca

qlfbtfca2#

我猜“杰拉特”是你的身份证

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的max id是最近的记录。我们按gerateid分组,选择max id*。因此,内部连接只将记录过滤为每个站具有max id的记录,从而给出每个站的最新记录的结果集

  • 因为id是一个主键,所以我们不需要其他任何东西——例如,如果pk是一个guid(本质上是一个随机数),那么选择max就不起作用了。我们需要选择例如杰拉泰德和马克斯日期和加入这两个。

在任何最大n个组的查询中,我们基本上必须找到一种只获取最大记录的方法。通常,在执行组操作时,除了将其限定为组中的最大值(max id、max date等)之外,我们不能引入任何数据,因此我们必须将组操作作为子查询执行,获取最大值记录,然后将表示最大值的数据联接到表中,以检索所需的其余数据
有很多方法可以做到这一点,我最喜欢的方法之一是使用行号分析查询,但它在mysql中不可用

相关问题