我在MysqL表中有以下数据:活动
ID为“主要”列
TID不是主要的
ID name TID11145 Reg 11114008 Inn 11120246 Opp 111 <>20250 Godk 111 <--111450 Reg 222140080 Inn 222202460 Opp 222 <>202500 Godk 222 <--
我只需要提取前一行到name =“ Godk”的行即可.您可以看到上一列并不总是primaryID-1,但可以是primaryID-n
所需结果:
20246 Opp 111202460 Opp 222
我尝试使用以下方法
SELECT x.*,MAX(y.ID) as prev,FROM Activity x,INNER JOIN Activity y ON y.TID = x.TIDAND y.ID < x.ID where y.name like '%Godk%'GROUP BY x.TID,x.ID;
但是我根本没有得到预期的结果.最佳答案我们可以使用相关子查询来处理此问题:
SELECT ID,name,TIDFROM Activity a1WHERE (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,TIDFROM cteWHERE lead_name = 'Godk';
Demo总结
以上是内存溢出为你收集整理的MYSQL:获取上一行,但基于非主列 全部内容,希望文章能够帮你解决MYSQL:获取上一行,但基于非主列 所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)