![](/img/trans.png)
[英]sql query to get the previous row value of one column to be inserted as 2nd row value of another column
[英]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 4
和LIMIT 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 |
替代解决方案易于理解的解决方案:
您可以将嵌套查询中的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.