当我在一个雄辩的声明中使用groupby时,如何获得最早的创建时间?
我有一张table,上面有:
| id | name | email | created_at |
|----|--------|---------|---------------------|
| 1 | test | 1@1.com | 2018-01-01 09:00:00 |
| 2 | test | 1@1.com | 2018-01-02 09:00:00 |
| 3 | test 2 | 2@2.com | 2018-01-02 09:00:00 |
| 4 | test 2 | 2@2.com | 2018-01-03 09:00:00 |
| 5 | test | 1@1.com | 2018-01-03 09:00:00 |
| 6 | test | 1@1.com | 2018-01-04 09:00:00 |
| 7 | test | 1@1.com | 2018-01-05 09:00:00 |
| 8 | test 3 | 3@3.com | 2018-01-06 09:00:00 |
| 9 | test 3 | 3@3.com | 2018-01-07 09:00:00 |
运行以下查询时:
Customers::OrderBy('created_at', 'desc')->groupBy('email')->paginate('5');
我希望得到以下顺序的结果:
Test 3 (created: 2018-01-07)
Test (created: 2018-01-05)
Test 2 (created: 2018-01-03)
但事实上,我得到的是这样的,它看起来不像是尊重orderby
Test 3 (created: 2018-01-06)
Test 2 (created: 2018-01-02)
Test (created: 2018-01-01)
这是sql小提琴http://sqlfiddle.com/#!1989年9月39日
编辑-基于响应的答案
多亏了nesku,使这项工作得以进行的最终查询是:
return DB::table('customers')
->select(DB::raw('email, max(created_at)'))
->groupBy('email')
->orderBy('max(created_at)', 'desc')
->get();
1条答案
按热度按时间093gszye1#
你不能点菜
created_at
但是,因为它包含多个值,所以可以取created_at
每封邮件和订单。sql查询如下所示:
http://sqlfiddle.com/#!9/89ee39/12