试着理解,如果我选择WHERE item_id='$item_id' AND date(datetime)='2012-06-25'
这样的记录,如果该记录不存在,那么我想在该日期之后获得最近的记录。如何在查询中实现这一目标?
我现在能想到的唯一方法是,如果num_of_rows为0,那么我将在当天提前3天添加并再次搜索并获取 DESC datetime LIMIT 1
(如果有多行) 。但谁知道我只用一个查询就可以做到。
记录可能在一天内有多行。因此,如果特定日期没有记录,如何获得给定相同$ item_id的下一个最近的可用数据?
答案 0 :(得分:4)
SELECT *
FROM table
WHERE field <= '2012-06-25'
ORDER BY field DESC
LIMIT 1
答案 1 :(得分:0)
这将返回最接近您在查询中输入的日期的项目。但是,它不会在之前或之后查找,只需查找与您输入的内容最接近的日期。
select
min(abs(DATEDIFF(date(datetime),'2012-06-25'))) as minDiff
,yourID
from table1
group by yourID
order by 1 asc;
答案 2 :(得分:0)
我认为这就是你要找的东西:
SELECT *
FROM my_table
WHERE datetime BETWEEN '2012-06-25 00:00:00' AND
DATE_ADD('2012-06-25 00:00:00', INTERVAL 3 DAY)
ORDER BY datetime ASC
LIMIT 1;
还可以在字段日期时间创建索引,以提高性能。