表格结构
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的日期,因此范围从最低日期开始) 最佳答案
您不需要“除非没有这样的日期,否则范围的开始应该是可用的最低日期”逻辑,因为如果您只是选择$ start之后的所有日期(如果没有之前的日期) ,那么您将自动获得下一个最新日期。并且您已经知道$ start到下一个最近日期之间没有记录,因此不要费力尝试将它们排除在外!
WHERE Date BETWEEN coalesce((select max(date)
from table1
where date <= $start)
, $start) and $end