【发布时间】:2013-12-09 23:32:46
【问题描述】:
我有两张桌子,一张叫 check_ins,另一张叫 holiday。
check_ins 有一个 datetime_start 和 datetime_end 列(除了这个问题不需要的其他东西)。假期表的日期范围为假期开始和结束的两列。
我需要弄清楚谁在假期的前一天和第二天的假期范围内,以确定谁获得假期工资。换句话说,我只需要同一员工在前一天和后一天的表中的结果,而忽略其余的。
我整天绞尽脑汁想办法做到这一点,但一无所获。我在这里叫错树了吗?我应该通过 PHP 执行此操作吗?
谢谢!
编辑:这是我使用的,虽然我有它,直到我意识到他们可能在一天内多次签到:
SELECT DISTINCT count(check_ins.Employee_ID), check_ins.ShiftStart_Datetime, check_ins.ShiftEnd_Datetime, holidays.* FROM check_ins, holidays WHERE holidays.ID = 2 AND DATE(DATE_ADD(Datefrom, INTERVAL -1 DAY)) = DATE(ShiftStart_Datetime) GROUP BY Employee_ID HAVING count(check_ins.Employee_ID) >1 UNION SELECT DISTINCT check_ins.Employee_ID, check_ins.ShiftStart_Datetime, check_ins.ShiftEnd_Datetime, holidays.* FROM check_ins, holidays WHERE DATE(DATE_SUB(Dateto, INTERVAL -1 DAY)) = DATE(ShiftStart_Datetime) GROUP BY Employee_ID HAVING count(check_ins.Employee_ID) >1
【问题讨论】: