Laravel如何根据日期获取最接近的历史数据库数据
修改方案:获取当前日期前最近的历史数据
你可以直接优化数据库查询逻辑,不再固定查询前一天的数据,而是查询小于当前日期的所有同symbol数据,按日期倒序排列后取第一条,这样就能自动拿到最接近当前日期的历史记录。
修改后的代码:
foreach ($file as $row) { $current_date = Carbon::createFromFormat('d-M-Y', str_replace(' ', '', $row[2]))->format('Y-m-d'); // 查询当前日期之前、同symbol的最近一条数据 $pd = EodBhavData::where('symbol', $row[0]) ->where('date', '<', $current_date) ->orderBy('date', 'desc') ->first(); // 后续的对比计算逻辑... }
逻辑说明:
- 去掉了原代码中固定减一天的
$previous_date变量,直接通过where('date', '<', $current_date)筛选所有早于当前日期的记录 orderBy('date', 'desc')让最新的日期排在最前面first()直接取排序后的第一条,也就是最接近当前日期的历史数据
这样不管当前日期前缺了几天的数据,都会自动找到最近的那一条存在的记录。
内容的提问来源于stack exchange,提问作者rjcode
相关产品推荐
相关产品推荐

