如何选择在给定持续时间内的日期时差记录



对于Laravel应用程序中的Log模型,我试图选择在某个差异中按顺序排列的所有记录。我的意思是选择所有结果日志,长度,对于给定的datetime列,前一个和下一个记录之间的差在给定的时差限制内。

请参阅下面的查询,使用一些虚构的语法来尝试理解我的意图。

Log::query()
->whereDateDiff('created_at', '<', '2 hours') // This method does not exist.
->get();

假设我有以下数据。这里我想选择到第4行并包括第4行的记录,因为第4行和第5行之间的时间差大于2小时。

----------------------------
| id | created_at          |
----------------------------
| 1  | 2022-11-17 08:01:52 |
| 2  | 2022-11-17 08:31:14 |
| 3  | 2022-11-17 09:02:49 |
| 4  | 2022-11-17 09:03:30 |
| 5  | 2022-11-17 16:21:12 |
| 6  | 2022-11-17 17:01:27 |
----------------------------

我在网上搜索了一个Eloquent的方法,但是我还没有找到一个方法来定义某种查询。从这个堆栈溢出问题("连续行之间的日期差异")中学习,我们知道如何在SELECT语句中计算SQL中连续行之间的差异,但我想在WHERE中有这个。我希望这可以在一个查询中实现,最好使用Eloquent语法,但我担心这可能只能在PHP层中实现。解决这个问题的最佳方法是什么?

我会尝试通过使用多个条件来解决这个问题。例如:

Log::where('created_at', '>=', $from)->where('created_at', '<=', $to)->get();

我想生成$from和$to变量对您来说并不困难。其中一个是你想要的具体时间然后用碳,你可以提供另一个变量。然后你可以在你的查询中提供它们。

最新更新