2012-03-23 55 views
0

这可能是一个简单的最接近的值,但因为我没有关于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" 
+0

选择一个id,日期从id_table ORDER BY时间DESC LIMIT 1个工作?可以使用一些应用程序代码来检查你的第一个查询是否返回0结果,如果是这样的话。 – Corbin 2012-03-23 04:11:43

回答

3

你寻找一个(我假设最大ID)ID的行与最接近time到2010-01-05?

SELECT MAX(ID) as LastId FROM id_table 
WHERE time = (SELECT MAX(time) 
       FROM id_table WHERE time < '2012-01-05') 
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)

0

获得的数据最接近得到记录给定的时间(你可以很容易地调整这个,如果你关心处理重复,如果不那么重要单凭这一点就足够了)

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

注意:如果时间字段为时间值YYYY-MM-DD HH:MM:SS则可以使用TIMEDIFF进行更准确的比较。

OP如果你介绍一些关于你想如何处理不同的情况下,我可以调整这个例子中,以满足他们。干杯。

+0

+1即使有完全匹配,这个人也能工作。如果OP在给定日期之前只需要记录,他可以添加where子句或删除绝对值。 – 2012-03-23 05:17:05