繁体   English   中英

SQL 查询以获取倒数第二行

[英]SQL query to get 2nd last row

我有一个名为 User 的 sql 表。 我想按 id 对其进行排序并获得倒数第二个用户。 在 sql 中是否有通用的方法来做到这一点?

例如我有这些行:

id    name
1     User 1
2     User 2
3     User 3
4     User 4

我想编写一个 sql 查询来获取用户 3。我想要一个通用查询,我也可以将它用于倒数第三个或倒数第四个用户。

下面的查询将根据 id 为您提供倒数第二个用户。 它通过首先按id降序排序来实现这一点,使用OFFSET 1按顺序跳过新的第一行,即User 4LIMIT 1只让User 3成为下一个剩余用户。 您可以在线运行的小提琴中显示的一般模式是更新OFFSET

架构(MySQL v5.7)

CREATE TABLE User (
  `id` INTEGER,
  `name` VARCHAR(6)
);

INSERT INTO User
  (`id`, `name`)
VALUES
  ('1', 'User 1'),
  ('2', 'User 2'),
  ('3', 'User 3'),
  ('4', 'User 4');

查询 #1

SELECT "GET 2nd to Last";
获得倒数第二名
获得倒数第二名

查询 #2

SELECT
    *
FROM 
   User
ORDER BY
   id desc
LIMIT 1
OFFSET 1;
ID 姓名
3 用户 3

查询 #3

SELECT "GET 3rd to Last";
获得倒数第三名
获得倒数第三名

查询 #4

SELECT
    *
FROM 
   User
ORDER BY
   id desc
LIMIT 1
OFFSET 2;
ID 姓名
2 用户 2

查询 #5

SELECT "GET 4th to Last";
获得第 4 名到最后
获得第 4 名到最后

查询 #6

SELECT
    *
FROM 
   User
ORDER BY
   id desc
LIMIT 1
OFFSET 3;
ID 姓名
1 用户 1

在 DB Fiddle 上查看

替代解决方案易于理解的解决方案:

您可以将嵌套查询中的LIMIT 2替换为LIMIT 3以获取倒数第 3 个或LIMIT 4以获取倒数第 4 个用户。

SELECT *
FROM (
 SELECT *
 FROM User
 ORDER BY id DESC
 LIMIT 2
)
ORDER BY id
LIMIT 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM