我有一个包含索引和日期的数据,我需要执行以下逻辑:如果日期范围小于31,则需要将第一个日期与下一个日期进行比较;如果不大,则将第二个与第三个日期进行比较。大于31则保留第一个和第三个,如果删除较少或添加较大,则将第三个与第四个进行比较。谁能帮我这个逻辑上
应该仅将第一条记录与以前的记录(大于31条)进行比较
index DATE
1 2020-01-01
1 2020-01-15
1 2020-01-30
1 2020-02-02
1 2020-02-20
1 2020-03-05
1 2020-03-25
2 2020-04-30
必需的输出
index DATE
1 2020-01-01
1 2020-02-02
1 2020-03-05
2 2020-04-30
答案 0 :(得分:0)
这回答了原始问题,该问题被标记为MySQL。
您需要对这种类型的操作使用递归CTE:
with recursive cte(ind, date) as (
select ind, min(date) as date
from t
group by ind
union all
select cte.ind,
(select min(t2.date)
from t t2
where t2.ind = cte.ind and t2.date > cte.date + interval 30 day
)
from cte
where exists (select 1
from t t2
where t2.ind = cte.ind and t2.date > cte.date + interval 30 day
)
)
select *
from cte;
Here是db <>小提琴。
答案 1 :(得分:0)
在下面的查询中尝试此操作
create table indextbl(indexid int, dt date)
insert into indextbl values(1, '2020-01-01')
,(1,'2020-01-15')
,(1,'2020-01-30')
,(1,'2020-02-02')
,(1,'2020-02-20')
,(1,'2020-03-05')
,(1,'2020-03-25')
,(2,'2020-04-30')
select indexid, MIN(dt) from indextbl
group by indexid, LEFT(dt,7)