laravel如何在grouby之前把数据先orderby一下,后groupby完了之后再orderby一下

我有一个 user 表,我希望拿用户最晚时间登录的列表
id uid time
1 455 1651115925
2 455 1651115928
3 440 1651115920
4 440 1651115820
5 440 1651115780
6 440 1651115680
7 440 1651115100
8 455 1651115990

$res = DB::table(‘user’)->where(‘time’,>, 0)
->groupBy(‘uid’)
->orderBy(‘time’, ‘desc’)->get()->toArray();

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [uid] => 455
            [time] => 1651115925
        )

[1] => stdClass Object
    (
        [id] => 3
        [uid] => 440
        [time] => 1651115920
    )

)
结果不对,它是先 groupby,在 orderby 了,能不能groupby以前做一次排序,后再操作

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案
SELECT MAX(time) time, uid FROM USER GROUP BY uid
2年前 评论
讨论数量: 3
SELECT MAX(time) time, uid FROM USER GROUP BY uid
2年前 评论

如果有其他属性列也需要的话

SELECT
    * 
FROM
    `user` 
WHERE
    `id` IN ( SELECT max( `id` ) FROM `user` GROUP BY `uid` );
2年前 评论

能不能 groupby 以前做一次排序,后再操作

意思就是你的查询条件不对。

举例:用户阅读记录表。用户,书本,章节,阅读时间。

如果要查询用户最后阅读的书本章节(不是最大章节),要先查 max 阅读时间 group by 书本 ,然后 join 查章节。

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!