基于最新时间戳选择一组记录的MySQL Select语句

4

我有一个定时程序,每隔几个小时就会在用于记录日志的表中创建多个条目。我需要做的是选择具有相同帐户ID的最新时间戳的所有记录。类似这样:

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

我遇到的困境是不能使用类似 LIMIT 5 这样的语句,因为每个例行间隔创建的记录数量可能不同。例如,当例行任务在上午10点运行时,它可能创建6个表项,在下午2点仅创建4个表项。

是否有一种方法可以选择最新记录的分组,而不知道有多少条记录?

2个回答

3
假设你的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可供尝试。

祝你好运。


1
那个完美地运行了 - 谢谢!一个快速的问题 - 现在每个时间间隔的时间戳都是相同的(即2013-01-27 08:00:01)。如果由于某种原因条目跨越几秒钟(即2013-01-27 08:00:01,2013-01-27 08:00:02),这仍然有效吗?还是只会选择08:00:02的条目? - Jason
我刚在Fiddle中运行了它,并将一些时间戳改变了几秒钟,似乎它可以工作! - Jason

0

我认为你想要的是按时间戳分组。假设所有在上午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)

假设时间戳是一个字符串(日志文件)。如果不是,你必须将其转换为字符串。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接