我正在尝试使用 groupby 获取最后一行, 我有一些重复的 jobseeker_id,但不同的是 call_reason、status、type_of_call 等......和 created_at。
id jobseeker_id type_of_call status call_reason created_at
1 2001 incoming_call good because of track 2017.10.1
2 2001 outgoing call fair they called me 2017.11.2
3 2001 outgoing call bad something 2017.12.3
4 2002 outgoing call good something 2018.11.6
所以我预计只会出来
id jobseeker_id type_of_call status call_reason created_at
1 2001 outgoing call bad something 2017.12.3
4 2002 outgoing call good something 2018.11.6
$jobseekers =DB::table('calllogs')
->select(DB::raw("max(created_at),jobseeker_id,call_reason,type_of_call"))
->orderBy('created_at','desc')
->groupBy('jobseeker_id')
->wherenotnull('call_back_date')
->get();
上面的查询像我这样返回
id jobseeker_id type_of_call status call_reason created_at
3 2001 incoming_call good because of track 2017.12.3
4 2002 outgoing call good something 2018.11.6
我只能得到最新的 created_at 日期,但我无法得到最新的 staus、type_of_call、call_reason。有人能知道吗?请帮助我。
最佳答案
不熟悉 laravel,但你的问题是你需要用 id 识别行,然后从中选择列。您正在尝试获取最大的 created_at,然后只是获取其余列的分组值。查询看起来像..
SELECT * FROM calllogs WHERE id IN (
(SELECT MAX(ID) FROM calllogs GROUP BY jobseeker_id);
我假设您显示的预期结果中的 id 应该是 3 而不是 1。查询应该至少适用于我能看到的有限集合。可能需要根据您的其余数据添加更多改进,但这应该让您了解什么可能有效。希望这可以帮助。
关于php - 如果不是整数或日期,如何在查询构建器中获取组中的最后一项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47873599/