我有一个表格时间表,其中包含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。
答案 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();