Mysql 根据条件筛选SQL表
我在MySQL中有这样一个表:Mysql 根据条件筛选SQL表,mysql,sql,relational-database,Mysql,Sql,Relational Database,我在MySQL中有这样一个表: Group Seqno Event 1 1 A 1 2 B 1 3 C 1 4 B 1 5 E 1 6 B 1 7 D 1 8 A 对于Event=B的每个组,我想计算最后一行(最近的条目)中的所有行,并在达到count 2时返回所有剩余的行。 输出将是 Group Seqno Event 1 4 B
Group Seqno Event
1 1 A
1 2 B
1 3 C
1 4 B
1 5 E
1 6 B
1 7 D
1 8 A
对于Event=B的每个组,我想计算最后一行(最近的条目)中的所有行,并在达到count 2时返回所有剩余的行。
输出将是
Group Seqno Event
1 4 B
1 5 E
1 6 B
1 7 D
1 8 A
你知道如何实现吗。你似乎想要从第二行到最后一行的“B” 如果是,则可以使用相关子查询:
select t.*
from t
where t.seqno >= (select t2.seqno
from t t2
where t2.group = t.group and t2.event = 'B'
order by t2.seqnum desc
limit 1, 1
);
要处理可能没有“第二个”序列号的情况,可以使用coalesce()
:
您似乎想要每组中从第二行到最后一行的所有行。谢谢。我从每组的最后一条记录中数“B”。例如,第16B行是计数1,第14B行是计数2。现在,返回这行下面的所有记录。@No\u body。我想这正是你想要的。谢谢。它工作得很好,但如果没有“B”或计数小于2,比如说1,在这种情况下,我应该如何继续?t2.event='B'将在没有事件的情况下失败B@No_body . . . 在这种情况下,不会返回任何行。没有“failure”,只有一个
NULL
返回值。如果B的计数小于2,则不返回该ID的任何行。是否可以设置类似if count的条件
select t.*
from t
where t.seqno >= coalesce( (select t2.seqno
from t t2
where t2.group = t.group and t2.event = 'B'
order by t2.seqnum desc
limit 1, 1
), t.seqno
);