如何在groupby的每组获取最新的那条,子查询orderby desc也无法生效, 子查询distinct倒是可以,但是这个是正经写法吗
如何在groupby的每组获取最新的那条,子查询orderby desc也无法生效, 子查询distinct倒是可以,但是这个是正经写法吗
可以先通过分组查询到每个分组 ID 最新的记录,然后再连接本表,查询得到 ID 对应的记录详情。
例如有用户购买记录表
user_purchase
,结构如下:表中记录如下:
现在需要统计每个用户最新的一条下单记录。
可以通过
group by
结合联表查询获取到结果,SQL 如下:查询结果如下:
这里查询出的结果和我们预期的基本一致。唯一有点疑问的是,uid 为 3 的用户出现了两条记录,这是因为这两条记录的购买时间相同,所以都被取出来了。如果想只取一条记录的话,这里只需要再定义一条排序规则,然后限制获取即可。
例如,如果存在相同时间的记录,取 id 较大的记录,SQL 如下:
结果如下:
和预期一致。