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
你为什么不将它与$开始日期进行比较?
SELECT Date, Price
FROM table1
WHERE Date <= $end
AND Date >=$start
我没有测试它,但它似乎为我工作(如果我知道你想要做什么)
这并没有捕获我想要范围启动/之前/ $开始参数如果没有完全在开始日期。我会用一些预期行为的例子来编辑我的原作。 – Johrn 2009-08-28 15:30:09
现在测试这个,coalesce看起来确实是我需要的。 – Johrn 2009-08-28 15:41:03
一旦我停止按照整数传递日期,就像梦一样工作。 Johrn 2009-08-28 15:50:51