美文网首页数据库专题
MySql 获取每个分组最新10条记录 -- 自定义变量

MySql 获取每个分组最新10条记录 -- 自定义变量

作者: SuSuSoo | 来源:发表于2021-05-29 05:21 被阅读0次

SELECT
    a.*
FROM
    (
    SELECT
        t1.*,
        @curr_cnt := t1.type AS curr_type,
        @rank := IF(
            @prev_cnt = @curr_cnt,
            @rank + 1,
            1
        ) AS rank,
        @prev_cnt := @curr_cnt AS prev_type
    FROM
        `goods` AS t1,
        (
        SELECT
            @curr_cnt := 0,
            @prev_cnt := 0,
            @rank := 0
    ) AS t2
ORDER BY
    t1.type,
    t1.addtime
DESC
) AS a
WHERE
    a.rank <= 10

查询逻辑

  1. goods 表进行排序, 先按分类 type 正序, 再按上架时间 addtime 倒序

`goods` AS t1,

...中间省略

ORDER BY
    t1.type,
    t1.addtime

  1. 初始化变量, 相当于 SET @curr_cnt := 0, @prev_cnt := 0, @rank := 0;

        SELECT
            @curr_cnt := 0,
            @prev_cnt := 0,
            @rank := 0

  1. 按分类进行编号, 当type与上一条记录的type相同时编号+1, 不同时编号重置为1

        @curr_cnt := t1.type AS curr_type,
        @rank := IF(
            @prev_cnt = @curr_cnt,
            @rank + 1,
            1
        ) AS rank,
        @prev_cnt := @curr_cnt AS prev_type

  1. 筛选最新上架的10条记录 ( 编号 < 10 )

WHERE
    a.rank <= 10

相关文章

网友评论

    本文标题:MySql 获取每个分组最新10条记录 -- 自定义变量

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