mysql - 在主 SELECT 之后使用 SELECT COUNT

标签 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

这里的问题是它给了我所有的值(value)

allValues

但是我需要限制电台的数量。电台在另一个表中列出

类似这样的事情。但它给了我一个语法错误。与 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);

这样我就能得到这个输出

enter image description here

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

注意:我不想对 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/

相关文章:

php - 在有序的 Mysql 查询中获取第 i 到第 j 行

c# - 有没有办法检查结果集中的一行或多行总和是否为特定值?

php自定义sql返回值

MySQL 从查询中获取列名

javascript - 我如何解析来自 openlibrary api 的 Json 数据? (适本地)

mysql - 为什么我在写入 300KB/sec 时绑定(bind)了 I/O 以写入 MySQL?

mysql - solr 模式中的日期时间字段

mysql - magento 数据库中的客户确认字段

jquery - 将 jQuery 与 SQL 结合起来

sql - 无法从Spark读取hadoop/hive外部S3表