在我的示例表中,有没有办法找出有记录的前 2 个最早的时间是什么?我不是在记录最早的行,而是基于H:i:s(不是Y-m-d)的最早行。在本例中,它将是第 3 行和第 4 行,因为它的时间分别为 4:07AM 和 5:08AM,无论日期如何。
id first_name time
1 joe 2011-10-01 10:01:00
2 mary 2011-10-02 06:05:00
3 sam 2011-10-03 04:07:00
4 mel 2011-10-04 05:08:00
5 bo 2011-10-05 13:10:00
您需要从日期/时间字段中提取时间部分(混淆地称为"时间")。 幸运的是,MySQL有一个功能:
select time(`time`)
from t
order by time(`time`)
limit 2;
其他答案是查看整个 DATETIME 列,如果您想要最早的时间 (H:m:s),则需要运行DATE_FORMAT()
:
SELECT time FROM table ORDER BY DATE_FORMAT(time, '%H:%m:%s') ASC LIMIT 2;
您也可以改用TIME()
:ORDER BY TIME(time) ASC
。如果要选择时间(没有PHP函数),可以使用SELECT TIME(time) as time
。
select time from table order by time(time) asc limit 2
带有ORDER BY TIME(time)
的答案将满足您的要求,如果您的要求不必扩展,那就太好了。
我的MySQL explain
我必须对此查询的所有行进行排序。如果您担心效率,则必须将时间行拆分为两行,即日期和时间。使用仅时间索引时,无需查看所有行。