MySql查询以选择具有下一个更低或更高日期的行

时间:2012-08-30 08:28:41

标签: mysql-5.1

我说'我从表中选择了具有最大日期值的数据:

SELECT * FROM  table_name WHERE column_name IN  (SELECT  MIN(column_name) FROM table_name

它工作正常,它选择具有“最新”日期值的数据。

我想知道在MySQL中是否有查询列出那些具有下一个降序日期的数据。 例如,在我的第一个选择中,我选择了具有MIN日期值的行,如下所示:2012-08-27 10:15:00 我希望用另一个查询来选择那些日期值的数据是最接近的下一个值,如下所示:2012-08-28 11:45:00

所以有其他行具有更大或更低的日期值,但我不想选择它们。只有最接近的,从我现在的。

1 个答案:

答案 0 :(得分:0)

如果你有一个日期时间的值你想要找到的最接近的下一个元素(我们将它命名为 comparison_date ),你可以尝试这样的事情:

SELECT * FROM  table_name WHERE column_name IN  (SELECT  MIN(column_name) FROM table_name WHERE column_name > comparison_date ORDER BY column_name)

这将返回晚于该日期的所有日期时间值。如果要将其限制为单个结果,则应使用:

SELECT * FROM  table_name WHERE column_name IN  (SELECT  MIN(column_name) FROM table_name WHERE column_name > comparison_date ORDER BY column_name) LIMIT 1

或者,如果您想要从当前时间开始的下一个最接近的日期时间,您可以将 comparison_date 替换为 NOW(),这是一个MySQL函数。然后,你可以尝试这样的事情:

SELECT * FROM  table_name WHERE column_name IN  (SELECT  MIN(column_name) FROM table_name WHERE column_name > NOW() ORDER BY column_name)

为了找到下一个较低的日期时间(或上一个日期时间,但我们称之为),您应该使用:

SELECT * FROM  table_name WHERE column_name IN  (SELECT  MIN(column_name) FROM table_name WHERE column_name < comparison_date ORDER BY column_name DESC) LIMIT 1