Laravel 5.4中的按分组分组

时间:2018-06-30 06:43:30

标签: php mysql laravel eloquent laravel-5.4

我有一个表格时间表,其中包含3列( id,ref_number,pay_date )。每个ref_number每个月都有一个pay_date。因此表看起来像这样:

id | ref_number | pay_date
-----------------------------
1  | A001       | 2018-06-29
1  | A001       | 2018-07-29
1  | A002       | 2018-06-30
1  | A002       | 2018-07-30
1  | A002       | 2018-08-30
1  | A003       | 2018-06-29

我只想获取从今天到某个日期(从今天起30或31天)之间具有pay_date的每个ref_number的最早记录。下面的查询在Mysql中工作正常(我稍后会动态传递日期)。

 SELECT id,ref_number,MIN(pay_date) FROM schedule
 WHERE  (pay_date BETWEEN '2018-06-30' AND '2018-07-30')
 GROUP BY ref_number

我知道我们可以在数据库配置文件中将mysql“ strict”设置为false,并且Group By的行为将与预期的一样,但是不必更改,是否还有其他方法可以解决此问题?

此查询的雄辩等效词是什么?有或没有groupby。

1 个答案:

答案 0 :(得分:1)

搜索了一段时间后,我遇到了一个使用嵌套选择语句的答案,并在Laravel中进行了尝试。它完全按照我的要求工作。这是一段可爱的代码:

Schedule::select(DB::raw(id, ref_number, MIN(pay_date) as pay_date))
          ->from(DB::raw("(SELECT * 
                       FROM schedule 
                       WHERE (pay_date > CURDATE())) 
                       temp")
                      )
          ->groupBy('temp.ref_number')
          ->get();