【问题标题】:SQL Statement:How to retrieve the start date corresponding to a record with no end dateSQL 语句:如何检索没有结束日期的记录对应的开始日期
【发布时间】:2019-01-24 01:33:51
【问题描述】:

我有员工开始和停止使用服务。这项服务每年都会记录,因为他们有资格在年初开始服务并在年底更新服务。我如何获得他们从一开始就开始的开始日期,而不是最近的 01/01/2019。在附图中,我想将 01-Mar-13 作为开始日期,将 01-Jan-00 作为结束日期,因为该员工自 2013 年 3 月 1 日以来一直在服务。

员工编号是可用于识别员工的另一列。

【问题讨论】:

  • 还有哪些其他列可以帮助解决这个问题?大概必须有一个员工标识符列?
  • 正确。员工编号可用。
  • 这不就和MIN(START_DATE) ... GROUP BY employee_number一样简单吗?
  • 不。开始日期的最小值给我们 01-JUL-11,这不是我要找的。我正在寻找 13 年 3 月 1 日,因为该员工在 2012 年 4 月 28 日停止了服务,并在 2013 年 3 月 1 日重新启动了服务。我想要有持续服务的那一天。
  • 那么,您想要 01-Mar-13,因为那是当前连续服务的开始时间?您如何确定该行是持续服务的行?其他行是什么?这整个例子是否来自同一名员工?我认为我们至少需要查看员工 ID 列以及任何其他列将 3 月 13 日行与其他列区分开来。

标签: sql oracle


【解决方案1】:

嗯。 . .确定雇员时期的开始时间。然后你可以使用条件聚合:

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-16
    • 2020-01-05
    • 2021-07-07
    • 2016-06-09
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 2020-11-16
    相关资源
    最近更新 更多