如果是MySQL表,并且id自增,实现很简单,只要group by 需要分组的字段,然后取max(id),就可以查询到每组的最新一条记录。
SELECT MAX(ID)
FROM
USER
GROUP BY
BY user_type
ORDER BY
create_time DESC;
如果id不是自增的,那么我们只能 max(create_time),但是这样就不能拿到时间最大那条记录的id,并且可能对应多条记录,但是id非最大。
为了实现这样的查询,我是这么写的
SELECT
t1.*
FROM
USER t1
WHERE
t1.ID IN ( SELECT t2.ID FROM USER t2 WHERE t2.user_type = t1.user_type ORDER BY create_time DESC LIMIT 1 )
如果你用的是PostgreSql,那么可以使用distinct on
SELECT DISTINCT ON (user_type) * from user order by user_type, create_type desc;