【问题标题】:MySQL Select Group of Records Based on latest timestampMySQL 根据最新时间戳选择记录组
【发布时间】:2013-01-10 17:42:21
【问题描述】:

我有一个每隔几个小时运行一次的例程,它在用于记录的表中创建多个条目。我需要做的是选择具有最新 时间戳 且具有共同帐户 ID 的所有记录。像这样的:

SELECT * 
FROM TABLE_logs 
WHERE ACCOUNT_ID='12345' 
ORDER BY TIMESTAMP DESC 

我被困的地方是我不能说LIMIT 5 或类似的东西,因为在每个例行时间间隔创建的记录数可能不同。因此,例如,当例程在上午 10 点运行时,它可能会创建 6 个表条目,而在下午 2 点仅创建 4 个表条目。

有没有办法在不知道有多少的情况下选择最新记录的分组?

【问题讨论】:

    标签: mysql select timestamp


    【解决方案1】:

    我认为您想要的是按时间戳分组。假设在上午 10 点输入的所有时间戳都具有相同的时间戳,下午 2 点,同上,将类似于:

      SELECT timestamp, Field1, Field2
        FROM Table_Logs
    GROUP BY timestamp
    

    如果你的时间戳太精确,只需做一个子字符串:

      SELECT LEFT(timestamp, 5), Field1, Field2
        FROM Table_Logs
    GROUP BY LEFT(timestamp, 5)
    

    假设时间戳是一个字符串(日志文件)。如果没有,则必须对其进行字符串化。

    【讨论】:

      【解决方案2】:

      假设您的意思是 Table_Logs 表中的多个条目可能具有相同的时间戳,并且您希望返回最近输入的每个条目,您需要使用 GROUP BY

      SELECT Field1, Field2, Max(TimeStamp) maxTime
      FROM Table_Logs
      WHERE Account_Id = '12345'
      GROUP BY Field1, Field2
      

      Field1等就是你要在Table_Logs中返回的字段。

      这里有一些示例SQL Fiddle 供您试用。

      祝你好运。

      【讨论】:

      • 效果很好 - 谢谢!一个快速的问题 - 现在每个时间间隔的时间戳都是相同的(即 2013-01-27 08:00:01)。如果由于某种原因条目跨越几秒钟(即 2013-01-27 08:00:01、2013-01-27 08:00:02)这仍然有效或只会选择 08:00:02进入?
      • 我刚刚在 Fiddle 中运行了它,并将一些时间戳更改了几秒钟,它似乎工作了!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-16
      • 2014-02-15
      • 2013-08-28
      • 2014-02-06
      • 2021-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多