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 所有行并不总是很明显。
拜托,我需要丢弃满足条件之前的记录,只保留等于满足条件的日期和之后的记录。
同样的,如果一个类型的所有记录都不满足条件,例如"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 所有行并不总是很明显。