[英]SQL Query to fetch data based on the date range
我有一個具有索引和日期的數據我需要執行邏輯,如果日期范圍小於 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
需要 output
index DATE
1 2020-01-01
1 2020-02-02
1 2020-03-05
2 2020-04-30
這回答了標記為 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;
這是一個 db<>fiddle。
試試下面的查詢
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.