MySQL - 如何获得从最接近点开始的范围?

问题描述:

表结构 -MySQL - 如何获得从最接近点开始的范围?

int PrimaryKey 
DateTime Date 
int Price 

我想这样做的是通过在开始和结束日期,并获得一系列

最大日期小于或等于开始除非没有这样的日期,在这种情况下,范围的开始应该是可用的最低日期。

的结束日期。

我的查询到目前为止是:

SELECT Date, Price 
FROM table1 
WHERE Date <= $end 
AND Date >= 
(
    SELECT Date 
    FROM table1 
    WHERE Date <= $start 
    ORDER BY Date DESC 
    LIMIT 1 
) 

子查询得到小于或等于起始值,然后将其用作用于主查询范围的低端最大日期。在那里获得'UNLESS'条款的任何建议?

例如,给定的日期表:

Jan 1, 2009 
Feb 1, 2009 
Mar 1, 2009 
Apr 1, 2009 

我想$start='Feb 18, 2009'$end='Apr 30, 2009'查询返回三行2月1日,3月1日,4月1日(2009年2月1日是全国最大的日期即小于或等于$ start)。

但是,如果我提供$start='Dec 1, 2009'$end='Apr 30, 2009'我希望所有四行返回(没有日期小于或等于$开始,所以范围内的最低日开始)

你不需要“除非有没有这样的日期,在这种情况下,范围的开始应该是可用的最低日期“逻辑,因为如果您只是在没有先前日期的情况下选择$开始后的所有日期,则无论如何您都会自动获得下一个最新日期。而且您已经知道$ start和下一个最新日期之间没有记录,所以请勿尝试排除它们!

WHERE Date BETWEEN coalesce((select max(date) 
           from table1 
           where date <= $start) 
          , $start) and $end 
+0

现在测试这个,coalesce看起来确实是我需要的。 – Johrn 2009-08-28 15:41:03

+0

一旦我停止按照整数传递日期,就像梦一样工作。 Johrn 2009-08-28 15:50:51

你为什么不将它与$开始日期进行比较?

SELECT Date, Price 
FROM table1 
WHERE Date <= $end 
AND Date >=$start 

我没有测试它,但它似乎为我工作(如果我知道你想要做什么)

+0

这并没有捕获我想要范围启动/之前/ $开始参数如果没有完全在开始日期。我会用一些预期行为的例子来编辑我的原作。 – Johrn 2009-08-28 15:30:09