如何在特定条件下从表中获取最接近的记录

vohkndzv  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(251)

我有一张像下面这样的table。

Name            flag
--------------------------------
ABC             success
DEF             fail
GHI             success
JKL             fail
MNO             fail
PQR             fail
STU             fail

我必须得到下面的记录旁边的“成功”标志记录。我尝试了几次,但我是新的mysql。
我的记录应该是:-

Name            flag
--------------------------------
JKL             fail
qv7cva1a

qv7cva1a1#

如果你有兴趣使用windows函数。
选择*,lead(flag,success)over(order by name)作为表中的下一个\u comm;

wecizke3

wecizke32#

SELECT *
FROM [Table_1]
WHERE [Table_1].id > (SELECT [Table_1].id FROM [Table_1] WHERE flag = 'success')
LIMIT 1

应在标记“success”后返回第一行

1aaf6o9v

1aaf6o9v3#

1) 我已经考虑了“id”列来考虑下一个记录

select * from yourtable where id = (select id from yourtable where flag='success')+1


2) 我也考虑过使用rownum

CREATE TABLE yourtable
    (`Name` varchar(3), `flag` varchar(7))
;

INSERT INTO yourtable
    (`Name`, `flag`)
VALUES
    ('ABC', 'fail'),
    ('DEF', 'fail'),
    ('GHI', 'success'),
    ('JKL', 'fail'),
    ('MNO', 'fail'),
    ('PQR', 'fail'),
    ('STU', 'fail')
;

create temporary  table t1 as 

select name,flag,@rownum:=@rownum+1 as rownum
from yourtable ,(SELECT @rownum := 0) as r;

select name,flag from t1 where rownum = 
(select rownum from t1 where flag='success')+1

在这里检查-http://sqlfiddle.com/#!2015年9月

相关问题