如何选择MySQL中当前时间戳内10分钟的所有记录?

TK1*_*123 16 mysql

我在一个名为"last_seen"的表列中有时间戳,如下所示:

2012-01-25 18:46:42
2012-01-23 08:19:04
2012-01-23 08:19:04

etc...
Run Code Online (Sandbox Code Playgroud)

如何获取时间戳在当前时间戳的10分钟内的所有记录(以最有效的方式)?

pio*_*trm 53

最有效的方法是将时间戳(和时间戳,不使用其上的任何函数)与可以计算为每行的常量的表达式进行比较,这样mysql可以使用在timestamp列上定义的索引.

SELECT * FROM myTable
WHERE last_seen >= NOW() - INTERVAL 10 MINUTE
Run Code Online (Sandbox Code Playgroud)

您始终可以尝试EXPLAIN SELECT ...查看索引是否可用于查找满足WHERE条件的行,而无需检查表中的每一行.


Mic*_*ski 6

您的问题要求在当前时间戳的 10 分钟内进行记录,但我认为这意味着过去不超过 10 分钟(不是未来):

SELECT col1, col2, col3 
FROM table
WHERE DATE_ADD(last_seen, INTERVAL 10 MINUTE) >= NOW();
Run Code Online (Sandbox Code Playgroud)

这将增加 10 分钟last_seen并将其与当前时间进行比较。如果该值更大,last_seen则小于十分钟前。

有关如何使用它的说明,请参阅 上的文档DATE_ADD()