我在MysqL表中有以下数据:活动
ID为“主要”列
TID不是主要的
ID Name TID
11145 Reg 111
14008 Inn 111
20246 Opp 111 <>
20250 Godk 111 <--
111450 Reg 222
140080 Inn 222
202460 Opp 222 <>
202500 Godk 222 <--
我只需要提取前一行到Name =“ Godk”的行即可.您可以看到上一列并不总是primaryID-1,但可以是primaryid-n
所需结果:
20246 Opp 111
202460 Opp 222
我尝试使用以下方法
SELECT x.*,MAX(y.ID) as prev,FROM Activity x,INNER JOIN Activity y
ON y.TID = x.TID
AND y.ID < x.ID
where y.Name like '%Godk%'
GROUP
BY x.TID,x.ID;
但是我根本没有得到预期的结果.
最佳答案
我们可以使用相关子查询来处理此问题:
SELECT
ID,Name,TID
FROM Activity a1
WHERE
(SELECT a2.Name FROM Activity a2
WHERE a1.TID = a2.TID AND
a2.ID > a1.ID
ORDER BY a2.ID
LIMIT 1) = 'Godk';
Demo
但是,如果您使用的是MysqL 8,那么LEAD分析函数是一种更简洁的方法:
WITH cte AS (
SELECT ID,TID,LEAD(Name,1) OVER (PARTITION BY TID ORDER BY ID) AS lead_name
FROM Activity
)
SELECT ID,TID
FROM cte
WHERE lead_name = 'Godk';
Demo
原文地址:https://www.jb51.cc/mysql/531946.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。