groupby email&get-earlish-created\u-at-date-in-group-laravel-elokent

guykilcj  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(249)

当我在一个雄辩的声明中使用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();
bybem2ql

bybem2ql1#

你不能点菜 created_at 但是,因为它包含多个值,所以可以取 created_at 每封邮件和订单。
sql查询如下所示:

SELECT email, max(created_at)
FROM `customers`
GROUP BY email
ORDER BY max(created_at) DESC

http://sqlfiddle.com/#!9/89ee39/12

相关问题