1

试图让我的头脑,如果我选择一个记录WHERE item_id='$item_id' AND date(datetime)='2012-06-25',如果该记录不存在,那么我想获得该日期之后最近的最新记录。如何在查询中实现这一点?

我现在能想到的唯一方法是,如果 num_of_rows 为 0,那么我在那天之前添加 3 天,然后再次搜索并获取DESC datetime LIMIT 1(如果有多行)。但谁知道我只需一个查询就可以做到。

该记录在一天内可能有多行。因此,如果特定日期没有记录,如何在给定相同 $item_id 的情况下获取下一个最近的可用数据?

4

3 回答 3

4
SELECT *
 FROM table
 WHERE field <= '2012-06-25'
 ORDER BY field DESC
 LIMIT 1
于 2012-07-26T11:25:03.610 回答
0

这将带回最接近您在查询中输入的日期的项目。但是,它不会在之前或之后查找,只需找到与您输入的内容最接近的日期。

select 
     min(abs(DATEDIFF(date(datetime),'2012-06-25'))) as minDiff
    ,yourID
from table1 
group by yourID 
order by 1 asc;
于 2012-07-26T11:26:48.643 回答
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;

还可以在字段 datetime 上创建索引以获得更快的性能。

于 2012-07-26T11:30:35.423 回答