从mysql表中获取最接近的值

时间:2012-03-23 04:03:27

标签: mysql

这可能是一个简单的,但由于我对MySQL知之甚少,我不知道如何做到这一点,这就是我基本上想要的,

我有这样的查询

//时间格式“yyyy-MM-dd”

SELECT ID 
FROM `id_table` 
WHERE time > "2012-01-05 " AND time < "2012-01-10";

但是在id_table我的数据只有2012-01-04,然后它再次从“2012-01-20”开始,所以上面的查询将返回null。有什么方法可以从表中检索最后一条数据记录,因为这个例子我可以从这个查询中得到2012-01-04日期的ID吗

SELECT ID 
FROM `id_table` 
WHERE time > "2012-01-05"

3 个答案:

答案 0 :(得分:3)

您是否正在寻找距离最近的ID到2010-01-05的行(我假设最大ID)time

SELECT MAX(ID) as LastId FROM id_table 
WHERE time = (SELECT MAX(time) 
              FROM id_table WHERE time < '2012-01-05')

答案 1 :(得分:0)

试试这个:

SELECT ID FROM id_table
WHERE time between
  least((select max(time) from id_table), "2012-01-05") AND "2012-01-10";

请注意,between将从"2012-01-10" and ("2012-01-05" OR "2012-01-05)

获取数据

答案 2 :(得分:0)

要获得最接近给定时间的记录(如果您关心处理重复项,您可以轻松调整此项,如果这无关紧要,那么仅此一项就足够了)

 SELECT
    ID
 FROM
    id_table
 ORDER BY ABS(DATEDIFF(time, '2012-01-05'))
 LIMIT 1

注意:如果时间字段是时间值yyyy-mm-dd hh:mm:ss,那么您可以使用TIMEDIFF进行更准确的比较。

OP如果您将详细解释如何处理不同的情况,我可以调整此示例以适应它们。欢呼声。