我在数据库中有一个表,我想从中获取记录,但条件有点复杂。
每 30 分钟,表中将添加三条记录。现在我想检索记录,但那些相差一小时的记录。所以基本上,如果在下午 1 点添加 3 条记录,然后在下午 1:30 添加 3 条记录,然后在下午 2 点添加另外 3 条记录,我希望能够获取在下午 1 点和下午 2 点添加的记录,但省略下午 1:30。
我会给出我的代码,但我使用的是Laravel,我认为不是每个人都能理解Laravel使用的查询生成器Eloquent。
附言:
public function hours24()
{
$data = new Main();
$temp = $data->order_by('updated_at', 'desc')->first();
$time = strtotime($data->updated_at);
$data = $data->where('updated_at', '>=', date('Y-m-d H:i', strtotime('-1 day')))->where('updated_at', '>=', $time + 3600)->get();
}
上面的问题是我每次都向$time添加 3600 秒,这是一个固定的时间,因此它仅适用于第一行,因为之后每行在技术上将相隔一个多小时。似乎没有办法为每行增加 3600。
如果您对在固定时间窗口中插入的记录感兴趣 - 大约在整点的顶部,假设 +/- 5 分钟,您可以按照以下方式执行一些操作:
Main::whereRaw('updated_at >= NOW() - INTERVAL 1 DAY')
->where(function ($query) {
$query->whereRaw('MINUTE(updated_at) > 54')
->whereRaw('MINUTE(updated_at) < 6')
})
->get();
转换为以下原始查询
SELECT *
FROM main
WHERE (MINUTE(updated_at) > 54
OR MINUTE(updated_at) < 6)
AND updated_at >= NOW() - INTERVAL 1 DAY
这是 dbfiddle 演示