Oracle:根据输入列表选择一年中的一周

问题描述

我有两个看起来像的桌子:

Table A:

  ORG_DATE
03/04/2018
02/10/2019
17/12/2018

Table B:

Start_date   End_Date     Week_of_Yr
01/04/2018  08/04/2018    2018041
01/10/2019  08/10/2019    2019101
14/12/2018  21/12/2018    2018123

目标是创建一个如下表:

  ORG_DATE      Week_of_Yr
03/04/2018       2018041
02/10/2019       2019101
17/12/2018       2018123

当表A中的字段ORG_DATE介于表B的开始日期和结束日期之间时,只需分配一年中的正确星期。

到目前为止,我尝试了以下操作,因为在表之间没有用于进行可能的联接的字段:

SELECT 
Week_of_Yr
FROM TABLE B
WHERE TO_DATE((SELECT 
               TO_CHAR(A11.ORG_DATE,'DD/MM/YYYY') ORG_DATE
               FROM TABLE_A A11
               GROUP BY A11.ORG_DATE),'DD/MM/YYYY') BETWEEN Start_date AND End_Date;

但是,查询不接受列表作为输入。有什么想法吗?

谢谢

解决方法

只需加入他们,检查org_date子句中的start_date是否在end_dateON之间。

SELECT a.org_date,b.week_of_yr
       FROM a
            LEFT JOIN b
                      ON b.start_date <= a.org_date
                         AND b.end_date > a.org_date;