Я хочу найти самые последние выигранные бизнесы ( estado = 'Ganado' ) от каждого клиента с текущей даты до введенного периода.
Кроме того, клиент должен иметьпредприятие, заработанное до указанного периода.
У меня есть запрос mySql, который отлично работает, но запрос Eloquent - нет.
MySql:
SELECT sortedTable.id, sortedTable.cliente_id, sortedTable.periodo, C.razon_social, U.name, U.apellido_p, U.apellido_m
FROM (SELECT * FROM negocios ORDER BY periodo_date DESC) as sortedTable INNER JOIN clientes C, users U //Order the table "negocios" by date to groupBy and keep the client with recently business won
WHERE C.id = sortedTable.cliente_id and sortedTable.user_id = U.id and sortedTable.estado = 'Ganado' and (sortedTable.periodo_date BETWEEN '2018-01-01 00:00:00' AND CURDATE()) //Search customers with a business won between the date entered and the current date
and sortedTable.cliente_id in (SELECT cliente_id
FROM negocios
WHERE estado = 'Ganado' and periodo_date < '2018-01-01 00:00:00') // The client has to have a business won before the period entered.
GROUP BY sortedTable.cliente_id
Eloquent:
$negociosGanados = \DB::table(\DB::raw("(SELECT * FROM negocios ORDER BY periodo_date DESC) as sortedTable"))
->join('clientes', 'sortedTable.cliente_id', '=', 'clientes.id')
->join('users', 'sortedTable.user_id', '=', 'users.id')
->where('sortedTable.estado', 'Ganado')
->whereBetween('sortedTable.periodo_date', array($periodo, $periodoActual))
->whereRaw("sortedTable.cliente_id in (SELECT cliente_id FROM negocios
WHERE estado = 'Ganado' AND periodo_date < '".$periodo."')")
->select('sortedTable.id',
'sortedTable.cliente_id',
'sortedTable.periodo_date'
)
->groupBy('sortedTable.cliente_id')
->get();
Этот красноречивый запрос отлично работает , но когда я помещаю столбцы в таблицу выбора "клиенты" и "пользователи"это не так.
->select('sortedTable.id',
'sortedTable.cliente_id',
'sortedTable.periodo_date',
'clientes.razon_social',
'users.name'
)
Ошибка:
SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1055 'crm.clientes.razon_social' отсутствует в GROUP BY ..
Я пытаюсь поместить новые столбцы в groupBy и исправил ошибку, но он не группируется по cliente.id и показывает несколько операций с одного и того же клиента.
->groupBy('sortedTable.cliente_id', 'clientes.razon_social', 'users.name')