SQL 满足条件时丢弃查询中的先前记录

SQL Discard previous records from a query when condition is met

拜托,我需要丢弃满足条件之前的记录,只保留等于满足条件的日期和之后的记录。

同样的,如果一个类型的所有记录都不满足条件,例如"x1"的,我们也需要它的所有记录。

它使用 Sybase IQ 进入存储过程。

示例...

Name Date Flag Action (not a column)
p1 1/2021 n discard
p1 2/2021 n discard
p1 3/2021 y needed, discard previous records (order by date desc) of P1 when condition is met (flag = y)
p1 4/2021 n needed
p1 5/2021 n needed
c1 1/2021 n discard
c1 5/2021 y needed, discard previous records (order by date desc) of C1 when condition is met (flag = y)
c1 9/2021 n needed
x1 1/2021 n needed
x1 2/2021 n needed
x1 3/2021 n needed
x1 4/2021 n needed

提前致谢

如果我没理解错的话,你想要从'y'开始的所有记录,或者如果没有'y'的所有记录。一种方法是:

select t.*
from t
where t.date >= (select t2.date
                 from t t2
                 where t2.name = t.name and t2.flag = 'y'
                ) or
      not exists (select 1
                  from t t2
                  where t2.name = t.name and t2.flag = 'y'
                 ) ;

您实际上也可以使用 all(或 any)来表达:

select t.*
from t
where t.date >= all (select t2.date
                     from t t2
                     where t2.name = t.name and t2.flag = 'y'
                    ) ;

但是,如果子查询 returns 没有行,则此 returns 所有行并不总是很明显。