Join two tables starting from the first in a date range from the second
I have two tables as below (date format: yyyy-MM-dd):
1) Table 1 - EMPLOYEE_OVERTIMES (alias: 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) Table 2 - EMPLOYEE_HOLIDAYS (alias: 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 EMPLOYEE_OVERTIMES and EMPLOYEE_HOLIDAYS tables are joined from other tables. I would like to find all records that meet the following criteria: EH.START_DATE <= EO.OVERTIME_DATE <= EH.END_DATE
3) Results table
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
+3
source to share
3 answers
You can use a simple 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
0
source to share