Я изменил запрос из этого ответа
Я считаю, что запрос может быть написан чище.Я позволю вам сделать это, если вы хотите.
App\User::select('*')
->from(\DB::raw("(select
low.*,
low.`date` as date_start,
high.`date` as date_end,
to_days(high.`date`) - to_days(low.`date`) as day_gap,
period_diff(date_format(high.`date`, '%Y%m'),
date_format(low.`date`, '%Y%m')) as month_gap
from reports low, reports high
where high.`date` =
(select
min(`date`)
from reports
where
`date` > low.`date`
and low.user_id = high.user_id
)
) as d")
)->get();
Теперь вы получите всех пользователей с 4 дополнительными полями: date_start ; date_end , day_gap и month_gap
Если вы хотите, чтобы пользователи имели месячный разрыв в 6 месяцев, вы можете сделать это:
App\User::select('*')
->from(\DB::raw("..."))
->where('month_gap', '>=', 6)
->get();