MYSQL:获取上一行,但基于非主列

MYSQL:获取上一行,但基于非主列,第1张

概述我在MYSQL表中有以下数据:活动ID为“主要”列TID不是主要的ID Name TID 11145 Reg 111 14008 Inn 111 20246 Opp 111 <> 20250 Godk 111 <-- 111450

我在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:获取上一行,但基于非主列 所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1166079.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存