模拟数据:
with t(dt,sign_in,num) as(
select date'2022-03-01',3,'A' from dual union all
select date'2022-02-16',3,'A' from dual union all
select date'2021-07-19',3,'A' from dual union all
select date'2021-06-29',3,'B' from dual union all
select date'2021-04-26',null,'A' from dual union all
select date'2021-02-23',3,'A' from dual union all
select date'2021-02-10',null,'A' from dual union all
select date'2020-06-29',1,'A' from dual union all
select date'2020-02-16',3,'A' from dual union all
select date'2019-07-19',3,'A' from dual union all
select date'2019-06-29',3,'A' from dual union all
select date'2019-04-26',null,'A' from dual union all
select date'2019-02-23',3,'A' from dual union all
select date'2019-02-10',null,'A' from dual union all
select date'2018-06-29',1,'A' from dual
)
select * from t order by dt desc
查询第一行sign_in等于3和上一行sign_in等于3的(找到第一个出现3的行)
条件:两行之间所有的sign_in都是3,num必须是相等的,而且现在减去上一行DT时间要大于1年。
这个是在行云数据库使用,最好使用通用的语法实现。
想要的结果: