首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用时间间隔拆分日期范围

使用时间间隔拆分日期范围
EN

Stack Overflow用户
提问于 2018-11-07 19:19:07
回答 1查看 40关注 0票数 0

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

这是我的桌子员工职业生涯的结构:

代码语言:javascript
运行
复制
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

下面是我的表中断的结构

代码语言:javascript
运行
复制
startDate     endDate    year   codeMission   employeNumber    type
 ---------- ---------------------------------------------------------
 2001-07-01 2002-04-10   2001     Tx100       N120         interpption

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

我希望最后的表格是这样的:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

发布于 2018-11-07 20:14:37

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

代码语言:javascript
运行
复制
 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表中的数据转换为与中断表匹配的数据,所以现在我们移动中断表中的数据

代码语言:javascript
运行
复制
 INSERT INTO NewTable
 SELECT startDate
        ,endDate    
        ,year
        ,codeMission
        ,employeNumber
        ,type
 FROM Interruption
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53188442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档