我有一个包含 3 列(id、ref_number、pay_date)的表 Schedule。每个 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
我只想为每个 ref_number 获取 pay_date 在今天和某个日期(从今天起 30 或 31 天)之间的最早记录。下面的查询在 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 会按预期运行,但无需更改是否有其他解决此问题的方法?
这个查询的 Eloquent 等效项是什么?有或没有 groupby。
最佳答案
搜索了一段时间后,我找到了使用嵌套选择 语句的答案,并在 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();
关于php - Laravel 5.4 中的 Group By 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51112453/