group-by-alternative

w8biq8rn  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(372)

我有一个有3列(id,参考号,付款日期)的表格时间表。每个参考号每个月都有一个付款日期。所以这张table看起来像这样:

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天)之间有付款日期的每个参考号获取最早的记录。下面的查询在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,groupby的行为也会如预期的那样,但是不必改变这一点,还有其他方法可以解决这个问题吗?
对于这个问题,什么是有说服力的等价物?有没有groupby。

cfh9epnr

cfh9epnr1#

在搜索了一段时间后,我发现了一个使用嵌套select语句的答案,并在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();

相关问题