【问题标题】:MYSQL Query: latest timestamp + unique value from the last 30 minutesMYSQL 查询:最近 30 分钟的最新时间戳 + 唯一值
【发布时间】:2011-06-25 02:16:20
【问题描述】:

我需要从我的 mysql 表中检索具有唯一值的最新行。 简单的表格布局是时间戳 (now()) 和用户名列。 该表每秒获取几次新数据,我需要用户名唯一的最新行。

SELECT MAX(timestamp) as timestamp, username 
    FROM bla 
    WHERE timestamp < (now() - interval 30 minute) 
    GROUP BY username 
    ORDER BY timestamp DESC 

这个查询似乎没有返回最新的值,可能是因为该组正在做我不想要的事情......

【问题讨论】:

  • 所以基本上你想要在过去 30 分钟内插入的每个用户的最新行?另外,请注意timestamp 是 mysql 中的保留字。您应该为该字段使用不同的名称,或者用反引号“转义”它。
  • 是的,您是对的,我的专栏使用另一个名称作为时间戳值,这只是一个示例 :) 无论如何感谢您的提示!

标签: mysql


【解决方案1】:

SELECT MAX(timestamp) as timestamp, username 
    FROM bla 
    WHERE timestamp > date_sub(now(), interval 30 minute) 
    GROUP BY username 
    ORDER BY timestamp DESC 

【讨论】:

    【解决方案2】:
    SELECT MAX(timestamp) as timestamp, username 
        FROM bla 
        WHERE timestamp > (now() - interval 30 minute) 
        GROUP BY username 
        ORDER BY timestamp DESC 
    

    【讨论】:

      【解决方案3】:

      虽然您编写的内容确实有效,但更快的解决方案可能是在我正在处理的数据库上使用左连接如果您想要该信息,则为行:

      SELECT *
          FROM `bla`
          WHERE bla.created_at > (now() - interval 30 minute) AND (next_bla.created_at IS NULL)
          LEFT JOIN bla next_bla ON bla.username = next_bla.username AND bla.created_at < next_bla.created_at
          ORDER BY bla.created_at DESC
      

      这将匹配 bla 中的每一行 w/ 通过时间戳 w/ 具有相同用户名的下一行,并选择没有下一行 (next_bla.created_at IS NULL) 的行,即它们是最近的行。

      您还可以使用 LIMIT 子句来提高性能。

      这是一篇很好的文章,详细解释了 GROUP BY 的工作原理,语言清晰: http://dev.mysql.com/tech-resources/articles/debunking-group-by-myths.html

      Andomar 的另一个类似回答 - MySQL "Group By" and "Order By"

      【讨论】:

        【解决方案4】:

        如果您想查看最后 30 分钟,那么我认为您应该使用“大于”而不是“小于”。

        ... WHERE timestamp > (now() - interval 30 minute) ...
        

        【讨论】:

        • +1 正要点击提交。很好 - 你打字更快。 ;-)
        • 糟糕,我看到了那个,但结果仍然没有显示最新的值。
        • @HyperDevil:如果以每秒 2 次的速度插入行,则可能很难针对实时数据验证查询结果。
        • 我确实明白你的意思,但在我运行查询之前,我可以看到表中有更新的结果。
        • @HyperDevil:您的timestamp 列实际上是时间戳数据类型吗?我想知道与 UTC 之间的转换是否有问题?
        猜你喜欢
        • 2016-03-24
        • 2021-04-07
        • 2018-10-22
        • 2017-12-02
        • 2012-12-17
        • 1970-01-01
        • 1970-01-01
        • 2014-10-09
        • 2012-03-16
        相关资源
        最近更新 更多