Как я могу получить самую раннюю дату create_at при использовании groupBy в красноречивом утверждении?
У меня есть таблица со следующим:
| 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/#!9/89ee39/2
# EDIT - на основе ответана ответ
Благодаря Nesku, наконец, запрос, чтобы получить эту работу был:
return DB::table('customers')
->select(DB::raw('email, max(created_at)'))
->groupBy('email')
->orderBy('max(created_at)', 'desc')
->get();