美文网首页
取最新的记录

取最新的记录

作者: 抬头挺胸才算活着 | 来源:发表于2022-02-05 11:50 被阅读0次

方法1:group by

字段问题通过join解决

方法2:over partition by

select * from ( select tmp.*, row_number() over(PARTITION BY 分组字段 order by 排序字段 desc) as rn from 表名 tmp ) where rn = 1

方法3:join

  • SQL
 SELECT t1.* FROM t_login_log t1
     LEFT JOIN t_login_log t2 ON t1.user_id = t2.user_id AND t1.login_time < t2.login_time 
     WHERE t2.id IS NULL; 
  • 解释
    对于有N条记录的用户来说,join之后的条数为(N-1) + (N-2) + ... + 0 + 1,对于左表来说,最小的一条有N-1条比它大,倒数第二条有N-2条比它大,以此类推,最大的一条没有谁比它大,但由于是左连接,会补上一条t2字段为NULL的一条,因此最后加上1。
    WHERE也是为了取出最大的这条记录。

  • 补上where之前的查询结果,方便理解


  • 参考
    MySQL去重保留最大的那条记录(取最新的记录)

相关文章

网友评论

      本文标题:取最新的记录

      本文链接:https://www.haomeiwen.com/subject/ihwekrtx.html