【问题标题】:How to get the latest rows for each user ID in laravel?如何获取laravel中每个用户ID的最新行?
【发布时间】:2020-04-06 18:05:42
【问题描述】:
id user_id name qty datetime
--- --------- ---- ---- -----------
1 1 a 5 2019-12-01 12:26:01
2 2 b 3 2019-12-13 12:26:02
3 1 c 4 2019-12-13 12:26:03
4 2 a 2 2019-12-25 12:26:04
5 1 c 2 2019-12-21 12:26:06
我想要这个数据
id user_id name qty datetime
--- --------- ---- ---- -----------
5 1 c 2 2019-12-21 12:26:06
4 2 a 2 2019-12-25 12:26:04
使用 laravel,如果可能的话,它的 sql 查询会是什么
【问题讨论】:
标签:
php
mysql
sql
laravel-5
greatest-n-per-group
【解决方案1】:
型号:
用户: id、姓名、电子邮件等...
订单: user_id、数量、姓名、日期时间等。
模型查询:
Orders::orderBy('datetime', 'desc')->get()->unique('user_id');
数据库查询
DB::table('orders')->orderBy('datetime', 'desc')->get()->unique('user_id');
【解决方案2】:
在纯 SQL 中,您可以使用相关子查询进行过滤:
select t.*
from mytable t
where t.datetime = (
select max(t1.datetime) from mytable t1 where t1.user_id = t.user_id
)
【解决方案3】:
或不相关的子查询...
select x.*
from mytable x
join (
select user_id, max(t1.datetime) datetime from mytable group by user_id
) y
on y.user_id = x.user_id
and y.datetime = x.datetime