我在 MySQL 上有一个这样的表:
ID Name Group
1 One A
2 Two B
3 Three A
4 Fore C
5 Five B
6 Six A
7 Seven B
我想从我选择的行中获取同一组中的上一行/下一行。就像我选择了 ID=5 的行一样,现在当我没有有关该行的任何信息并且与下一行(ID=7)相同时,如何获得同一组上一行(ID=2)。
最佳答案
您正在寻找LEAD或LAG具有Windows功能
,但支持mysql版本高于8.0。因此您可以在 select
看起来像这样。
TestDLL
CREATE TABLE T(
ID int,
Name VARCHAR(100),
`Group` VARCHAR(5)
);
INSERT INTO T VALUES (1,'One','A');
INSERT INTO T VALUES (2,'Two','B');
INSERT INTO T VALUES (3,'Three','A');
INSERT INTO T VALUES (4,'Fore','C');
INSERT INTO T VALUES (5,'Five','B');
INSERT INTO T VALUES (6,'Six','A');
INSERT INTO T VALUES (7,'Seven','B');
查询
select *,IFNULL((
SELECT t2.ID
FROM T t2
WHERE t1.Group = t2.Group and t1.ID > t2.ID
ORDER BY t2.ID DESC
LIMIT 1
),t1.ID)previousID
,IFNULL((
SELECT t2.ID
FROM T t2
WHERE t1.Group = t2.Group and t1.ID < t2.ID
ORDER BY t2.ID
LIMIT 1
),t1.ID) nextID
from T t1
[结果]:
| ID | Name | Group | previousID | nextID |
|----|-------|-------|------------|--------|
| 1 | One | A | 1 | 3 |
| 2 | Two | B | 2 | 5 |
| 3 | Three | A | 1 | 6 |
| 4 | Fore | C | 4 | 4 |
| 5 | Five | B | 2 | 7 |
| 6 | Six | A | 3 | 6 |
| 7 | Seven | B | 5 | 7 |
如果你的mysql支持windows功能,可以试试这个。
select *,
LAG(ID)previousID,
LEAD(ID) nextID
from T
关于mysql - 如何按组从mysql获取下一行/上一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51416745/