sql选择最早的日期多行

时间:2018-06-28 12:01:06

标签: sql

我有以下数据:

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。

希望这一切都有道理。

谢谢 伊恩

1 个答案:

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