表格结构 -
int PrimaryKey
DateTime Date
int Price
我想要做的是传递开始和结束日期,并获得范围
发件人:
小于或等于start UNLESS 的最大日期没有这样的日期,在这种情况下,范围的开头应该是可用的最低日期。
要:
结束日期。
到目前为止,我的查询是:
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'
返回3行2月1日,3月1日,4月1日(2009年2月1日是小于或等于$ start的最大日期) )。
但是如果我提供$start='Dec 1, 2009'
和$end='Apr 30, 2009'
我想要返回所有四行(没有小于或等于$ start的日期,所以范围从最低日期开始)
答案 0 :(得分:1)
你不需要“ UNLESS 没有这样的日期,在这种情况下,范围的开始应该是可用的最低日期”逻辑,因为如果你只是选择$ start之后的所有日期如果没有上一个日期,您无论如何都会自动获得下一个最新日期。并且你已经知道$ start和下一个最新日期之间没有记录,所以不要试图排除它们!
WHERE Date BETWEEN coalesce((select max(date)
from table1
where date <= $start)
, $start) and $end
答案 1 :(得分:0)
为什么不将它与$开始日期进行比较?
SELECT Date, Price
FROM table1
WHERE Date <= $end
AND Date >=$start
我没有测试过,但似乎对我有用(如果我明白你想做什么)