I have two tables like below (date format: yyyy-MM-dd):
1) Table1 - EMPLOYEE_OVERTIMES (alias: EO)
EMPLOYEE_ID | OVERTIME_DATE
--------------------
You can use 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
SQLFiddle demo
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