根据条件过滤SQL表

时间:2019-02-15 18:29:10

标签: 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的组的最后一个(最近的条目)行进行计数,并在计数达到2时立即返回所有剩余的行。 输出将为

Group Seqno Event
  1    4     B
  1    5     E
  1    6     B
  1    7     D
  1    8     A

任何想法如何实现它。

1 个答案:

答案 0 :(得分:1)

您似乎想要从第二行到最后一个“ 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()

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
                         );