选择时间差为1小时或更长的行

时间:2017-05-22 16:19:01

标签: php mysql laravel eloquent

我在数据库中有一个表,我想从中获取记录,但条件有点复杂。

每隔30分钟,表中会添加三条记录。现在我想要检索记录,但有一小时差异的记录。所以基本上,如果在下午1点添加3条记录,然后在下午1:30添加3条记录,然后在下午2点再添加3条记录,我希望能够获取在下午1点和下午2点添加的记录,但在下午1点30分离开。 / p>

我会提供我的代码,但我使用的是Laravel,我认为不是每个人都能理解Laravel使用的查询构建器Eloquent。

P.S:

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();
}

上面的问题是我每次都要加3600秒到$ time这是一个固定的时间,所以它只适用于第一行,因为之后每一行技术上都会超过一个小时。似乎没有办法每行增加3600个。

1 个答案:

答案 0 :(得分:1)

如果您对在固定时间窗口中插入的记录感兴趣 - 大约在一小时左右,让我们说+/- 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演示