通过电子邮件发送组并最早在组中创建日期-Laravel Eloquent

时间:2018-11-23 17:40:43

标签: php mysql laravel eloquent

如何在雄辩的陈述中使用groupBy来获取最早的created_at日期?

我有一个包含以下内容的表:

pod install

在运行以下查询时:

| 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');

但是我得到的却是它看起来并没有尊重OrderBy

Test 3 (created: 2018-01-07)
Test   (created: 2018-01-05)
Test 2 (created: 2018-01-03)

这是SQL小提琴 http://sqlfiddle.com/#!9/89ee39/2

#编辑-根据响应进行回答

感谢Nesku,最后查询以使该工作正常进行:

Test 3 (created: 2018-01-06)
Test 2 (created: 2018-01-02)
Test   (created: 2018-01-01)

1 个答案:

答案 0 :(得分:1)

您无法按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