代码之家  ›  专栏  ›  技术社区  ›  Feres.o

使用间隔分割日期

  •  0
  • Feres.o  · 技术社区  · 7 年前

    我有两张表,一张用于所有员工的职业生涯,另一张用于所有工作时间的中断

    以下是我的员工职业生涯结构:

    startDate    endDate    year    codeMission  employeNumber  type
     ---------- ---------------------------------------------------
     2001-01-01 2001-12-31   2001     Tx100       N120        work
     2002-01-01 2002-12-31   2002     Tx100       N120        work
    

    这是我桌子的结构

    startDate     endDate    year   codeMission   employeNumber    type
     ---------- ---------------------------------------------------------
     2001-07-01 2002-04-10   2001     Tx100       N120         interpption
    

    现在,我想创建一个新表,其中包含所有员工的职业生涯,没有中断期。这里是我的示例

    我希望最后一张桌子是这样的:

    startDate  endDate    year codeMission employeNumber     type
     ---------- --------------------------------------------
     2001-01-01 2001-06-31 2001     Tx100       N120         work
     2001-07-01 2002-04-10 2001     Tx100       N120         interpption
     2002-04-11 2002-12-31 2002     Tx100       N120         work
    

    或

    startDate  endDate    year codeMission employeNumber     type
     ---------- --------------------------------------------
     2001-01-01 2001-06-31 2001     Tx100       N120         work
     2001-07-01 2001-12-31 2001     Tx100       N120         interpption
     2002-01-01 2002-04-10 2002     Tx100       N120         interpption
     2002-04-11 2002-12-31 2002     Tx100       N120         work
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Sanal Sunny    7 年前

    我在这里遵循的过程是,将数据插入新表时,如果在中断表a中有条目,则更新开始和结束日期

     INSERT INTO NewTable
     SELECT NVL(i2.endDate+1,e.startDate) AS startDate
            ,NVL(i1.startDate-1,e.endDate) AS endDate    
            ,e.year
            ,e.codeMission
            ,e.employeNumber
            ,e.type
     FROM Employee e
     LEFT JOIN Interruption i1 ON e.employeNumber=i1.employeNumber AND YEAR(e.startDate)=YEAR(i1.startDate)
     LEFT JOIN Interruption i2 ON e.employeNumber=i1.employeNumber AND YEAR(e.endDate)=YEAR(i2.endDate)
    

    现在我们已经将employee表中的数据转换为与interruption表匹配的数据,所以现在我们移动interruption表中的数据

     INSERT INTO NewTable
     SELECT startDate
            ,endDate    
            ,year
            ,codeMission
            ,employeNumber
            ,type
     FROM Interruption