您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

MYSQL为最后5个不同的记录选择5个记录

MYSQL为最后5个不同的记录选择5个记录

在许多其他DBMS(Oracle,sql-Server,Postgres)中,可以使用窗口函数

SELECT id, file, folder, added
FROM
  ( SELECT id, file, folder, added,
           DENSE_RANK() OVER (ORDER BY added DESC) AS d_rank,
           ROW_NUMBER() OVER (PARTITION BY added ORDER BY id DESC) AS row_no
    FROM AviationImages
  ) d
WHERE d_rank <= 5          -- limit number of dates
  AND row_no <= 5 ;        -- limit number of images per date

MysqL中,您没有窗口函数OVER子句的奢侈:

SELECT i.id, i.file, i.folder, i.added
FROM
    ( SELECT DISTINCT added
      FROM AviationImages
      ORDER BY added DESC
      LIMIT 5
    ) AS da
  JOIN
    AviationImages AS i
      ON  i.added = da.added
      AND i.id >= COALESCE(
          ( SELECT ti.id
            FROM AviationImages AS ti
            WHERE ti.added = da.added
            ORDER BY ti.id DESC
            LIMIT 1 OFFSET 4
          ), -2147483647) ;             -- use 0 if the `id` is unsigned int

索引打开(added, id)将有助于提高效率-如果表使用InnoDB并且id为主键,则仅索引打开(added)就足够了。

MySQL 2022/1/1 18:52:41 有319人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶