2014-01-07 39 views
0

在我的示例表中,有一些方法可以找出有史以来最早的2次记录是什么?我并不是在最早的记录行之后,但最早的记录是基于H:i:s(而不是Y-m-d)。在这种情况下,它将是第3行第4行,因为它分别具有4:07 AM和5:08 AM的时间,无论日期如何。MySQL:选择有史以来记录的最早2次(上午)

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 
+0

你只想要午夜到中午的时间吗? –

回答

0
select time from table order by time(time) asc limit 2 
+1

再次阅读OP。 –

+1

我刚刚做了和编辑:S - 谢谢 – AdrianBR

2

你需要提取的日期/时间字段的时间成分(混淆的称为“时间”)。幸运的是,MySQL有此功能:您将需要运行一个DATE_FORMAT()

select time(`time`) 
from t 
order by time(`time`) 
limit 2; 
+0

不挑剔,但应该限制2 – user2366842

+0

@ user2366842。 。 。谢谢。 –

1

其他的答案看一看整个DATETIME列,如果你想的最早时间(秒H::M):

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

0

ORDER BY TIME(time)的答案将满足您的要求,如果您的要求不需要扩展,这很好。

我的MySQL explain是我必须对此查询的所有行进行排序。如果效率是您关心的问题,您必须将您的时间行分为两行,日期只有时间。如果只有索引,则不需要查看所有行。