简体   繁体   English

将两个表从第一个日期开始连接到日期范围从第二个开始

[英]Join two tables date from first in range of dates from second

I have two tables like below (date format: yyyy-MM-dd): 我有两个如下表(日期格式:yyyy-MM-dd):
1) Table1 - EMPLOYEE_OVERTIMES (alias: EO) 1)表1-EMPLOYEE_OVERTIMES(别名:EO)

EMPLOYEE_ID | OVERTIME_DATE
------------------------------------------------
1           | 2012-04-01
2           | 2012-08-14
3           | 2012-07-22
4           | 2012-10-30
5           | 2012-06-07

2) Table2 - EMPLOYEE_HOLIDAYS (alias: EH) 2)表2-EMPLOYEE_HOLIDAYS(别名:EH)

EMPLOYEE_ID | START_DATE | END_DATE   |
-----------------------------------------
1           | 2012-03-28 | 2012-04-10
2           | 2012-01-14 | 2012-01-30
3           | 2012-07-15 | 2012-07-25
4           | 2012-10-10 | 2012-10-13
5           | 2012-06-01 | 2012-06-07

The tables EMPLOYEE_OVERTIMES and EMPLOYEE_HOLIDAYS are joined from other tables. 表EMPLOYEE_OVERTIMES和EMPLOYEE_HOLIDAYS是从其他表联接的。 I would like to find all records that meet folowing criteria: EH.START_DATE <= EO.OVERTIME_DATE <= EH.END_DATE 我想查找所有符合以下条件的记录:EH.START_DATE <= EO.OVERTIME_DATE <= EH.END_DATE

3) Result table 3)结果表

EMPLOYEE_ID | START_DATE | END_DATE   | OVERTIME_DATE
-------------------------------------------------------
1           | 2012-03-28 | 2012-04-10 | 2012-04-01
3           | 2012-07-15 | 2012-07-25 | 2012-07-22
5           | 2012-06-01 | 2012-06-07 | 2012-06-07

SQLFiddle demo SQLFiddle演示

SELECT EH.*, EO.OVERTIME_DATE 
FROM EMPLOYEE_HOLIDAYS EH
JOIN EMPLOYEE_OVERTIMES EO
ON (EO.EMPLOYEE_ID = EH.EMPLOYEE_ID) AND 
   (EO.OVERTIME_DATE BETWEEN EH.START_DATE AND EH.END_DATE)

Would this work? 这行得通吗?

SELECT
  EO.Employee_ID,
  EH.Start_Date,
  EH.End_Date,
  EO.OverTime_Date
FROM
  EMPLOYEE_OVERTIMES EO INNER JOIN
  EMPLOYEE_HOLIDAYS EH ON EO.Employee_ID = EH.Employee_ID
WHERE
  EO.Overtime_Date BETWEEN EH.Start_date and EH.End_Date

You can use simple INNER JOIN 您可以使用简单的INNER JOIN

;WITH EO AS 
(
    SELECT 1 AS EID, '2012-04-01' AS OD
    UNION ALL
    SELECT 2, '2012-08-14'
    UNION ALL
    SELECT 3, '2012-07-22'
    UNION ALL
    SELECT 4, '2012-10-30'
    UNION ALL
    SELECT 5, '2012-06-07'
), EH AS
(
    SELECT 1 AS EID, '2012-03-28' AS SD, '2012-04-10' AS ED
    UNION ALL
    SELECT 2, '2012-01-14', '2012-01-30'
    UNION ALL
    SELECT 3, '2012-07-15', '2012-07-25'
    UNION ALL
    SELECT 4, '2012-10-10', '2012-10-13'
    UNION ALL
    SELECT 5, '2012-06-01', '2012-06-07'
)

SELECT EH.EID, EH.SD, EH.ED, EO.OD 
FROM EO
INNER JOIN EH
    ON EH.SD <= EO.OD AND EO.OD <= EH.ED

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在两个表的日期范围内加入/合并 - Join/Merge on date range from two tables Oracle Join表的日期范围在第一个表中,日期在第二个表中 - Oracle Join tables with range of dates in first table and dates in second table 在 ID 条件下连接两个表,第一个表中的日期在另一个表中的其他两个日期之间 - Join two tables on a condition of ID and a date from first table is between two other dates in another table 根据第一个日期连接两个表 - Join two tables based on date from first 连接两个表并将第二个表中的值分配给第一个表的每个日期 - Join two tables and assign values from second table to each date of the first table 如何在两个表之间创建联接,其中第二个表中的日期应介于第一个表中的两个连续日期之间 - How to create a join between 2 tables where the date from the second table should be between 2 consecutive dates from the first table MYSQL JOIN两个表限制第二个表的日期结果 - MYSQL JOIN two tables limit results from second table by date MySQL 5.1.7有条件地联接两个表,从第二个表中按日期选择顶部记录,从第一个表中选择所有记录 - MySQL 5.1.7 conditional join of two tables selecting top record by date from second table and all records from first 加入三个表,只选择第二个表的正数+第三个表的第一个和最后一个日期 - Join three tables, select only positive amount from second table + first and latest date from third table 你能加入两个表并得到一个包含 obj 列表的 obj(来自第一个表)(来自第二个表) - can you join two tables and result with an obj (from first table) containing a list of obj(from the second table)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM