我有一张桌子:
adate pdt_id pdt_rate
2017-10-02 5 20
2017-10-05 5 25
2017-10-07 5 23
2017-10-11 5 20
我必须在2017-10-01和2017-10-10之间的找到rate
产品pdt_id
5
对于2017-10-01,表中没有任何费率所以我采取较短的日期,如2017-09-30(无记录),2017-09-29(无记录)等等(不幸的是没有记录)。所以我把2017-10-01的更大日期改为2017-10-02(是的,有记录)所以我停止搜索并最终确定为
2017-10-01 rate is 20
现在找到2017-10-02的下一个日期,有记录并且是20
2017-10-02 rate is 20
遵循我得到的类似标准
2017-10-03 rate is 20
2017-10-04 rate is 20
2017-10-05 rate is 25
....
2017-10-10 rate is 23
所以我的问题是如何如果日期存在则查找给定日期的费率其他明智地采取较小日期的比率,如果较小的日期不存在,则找到下一个更大日期的比率?
最后我们获得所有日期的费率(从开始日期到结束日期)。
我怎样才能做到这一点?
$begin = new DateTime('2017-10-01');
$end = new DateTime('2017-10-10');
$daterange = new DatePeriod($begin, new DateInterval('P1D'), $end);
foreach($daterange as $date){
$dateval = $date->format("Y-m-d");
// here I want find the rate for each date
}
答案 0 :(得分:0)
这是一种方法:
select t.*
from t
order by (adate <= '2017-10-01') desc
abs(datediff(adate, '2017-10-01'))
limit 1;