SQL语句:如何检索与没有结束日期的记录对应的开始日期

时间:2019-01-23 17:07:59

标签: sql oracle

我有开始和停止使用服务的员工。这项服务每年都会记录一次,因为他们有资格从今年年初开始服务,并在今年年底续签。我如何获得他们从头开始而不是最近的01/01/2019的开始日期。在所附的图像中,我希望将日期从13年3月1日作为开始日期,将00年1月1日作为结束日期,因为员工自13年3月1日以来一直提供服务。

“员工编号”是可用于标识员工的另一列。

Click for image of dates in Database

1 个答案:

答案 0 :(得分:0)

嗯。 。 。确定雇用期的开始位置。然后,您可以使用条件聚合:

select empid,
       max(case when prev_stop_date is null or
                     prev_stop_date <> start_date - 1
                then start_date
            end) as start_date,
      max(stop_date) as stop_date
from (select t.*,
             lag(stop_date) over (partition by empid order by start_date) as prev_stop_date
      from t
     ) t
group by empid;