在主SELECT之后使用SELECT COUNT

时间:2018-10-20 10:05:03

标签: mysql sql

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

这里的问题是它赋予了我所有的价值

allValues

但是我需要将其限制为站数。电台在另一个表中列出

类似这样的事情。但这给了我一个语法错误。在限制范围内

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);

这样我就得到了输出

enter image description here

也许有人可以解决我的问题。

注意:我不想对LIMIT函数进行硬编码,因为站号可能会有所不同。我正在使用phpmyadmin。

2 个答案:

答案 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>