连接和比较两个不同表的开始日期和结束日期

时间:2019-01-25 21:25:07

标签: sql oracle

我对Oracle SQL还是很陌生,但在工作中未成功实现此实例。有人可以告诉我如何查询该实例吗?

我附加了一个显示表格的链接:https://imgur.com/GhDOmJ3 这些表包括子程序,程序和结果。我认为这些图像比我对每个实例的解释要好。


我想基于两个表中的两个日期列联接一个表:开始日期(Subprogram.SUB_BEGIN_DT和Program.PROG_BEGIN_DT)和结束日期(Subprogram.SUB_END_DT和Program.SUB_END_DT)。因此,要点是,为了使案例具有工作人员(program.worker_name),子程序的运行日期(subprogram.sub_begin_dt&subprogram.sub_end_dt)必须在程序的运行日期(Program.Prog_Begin_Dt&Program)之间。 PROG_END_DT)。否则,它为worker返回NULL。

此外,日期列中显示的“ NULL”值表示程序仍在运行。

谢谢


其他人的评论和建议的其他详细信息: 抱歉,不清楚。如果子程序的日期在该程序的日期之内,它将显示一个工作程序。我想我应该澄清一下,如果子工作人员计划的日期在计划的日期之内,则该程序的工作人员也是该子工作人员的工作人员。另外,如果程序日期是8到空(表示正在进行),并且子程序日期是9和12,或者子程序日期是9并且正在进行(空),则它将有一个工作程序。

同样在imgur链接中,RESULT表是我希望看到的结果。

1 个答案:

答案 0 :(得分:0)

如果我没听错,您也许可以执行以下操作:

SELECT sp.CASE_ID, sp.SUB_BEGIN_DT AS BEGIN_DATE_SP, sp.SUB_END_DATE AS END_DATE_SP,
        sp.NAME, sp.SUBPROGRAM, p.WORKER_NAME
FROM Subprogram sp
LEFT OUTER JOIN Program p
ON sp.CASE_ID = p.CASE_ID
    AND sp.SUB_BEGIN_DT >= p.PROG_BEGIN_DT
    AND ((sp.SUB_END_DT <= p.PROG_END_DT)
         OR
         (sp.SUB_END_DT IS NULL AND p.PROG_END_DT IS NULL)
        )
相关问题