我有以下数据:
id from_date to_date empty
1 24/03/2016 01/04/2016 Y
1 01/04/2016 23/06/2016 Y
1 05/08/2016 01/04/2017 Y
1 01/04/2017 01/04/2018 Y
1 01/04/2018 01/04/2019 Y
当前日期介于01/04/2018和01/04/2019之间,但是,最早的连续日期是05/08/2016。如何编写一个sql脚本,以从今天开始直到今天为止的最早日期。
是否可以在不创建临时表和更新每个ID的起始日期的情况下进行操作?上一行的from_date = to_date。
希望这一切都有道理。
谢谢 伊恩
答案 0 :(得分:0)
您似乎想将这些值分组在一起。这是获取连续日期的期间的一种方法:
select id, min(from_date), max(to_date)
from (select t.*,
sum(case when prev_to_date = to_date then 1 else 0 end) over (partition by id) as grp
from (select t.*,
lag(to_date) over (partition by id order by from_date) as prev_to_date
from t
) t
) t
group by id, grp;
要进行过滤,您可以添加:
having current_date >= min(from_date) and current_date <= max(to_date)