SQL查询以根据日期范围获取数据

时间:2020-07-15 15:29:03

标签: sql sql-server

我有一个包含索引和日期的数据,我需要执行以下逻辑:如果日期范围小于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

2 个答案:

答案 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)