【发布时间】:2015-01-02 07:33:54
【问题描述】:
我正在尝试创建一个查询来获取今天和最后一个日期的所有员工。
我有两列 in_date 和 out_date。因此,如果in_date 和out_date 两列都有记录,我不想获取这些记录。
我只想获取设置了 in_date 但未设置 out_date 的今天和昨天日期的记录,以及那些甚至没有 in_date 和 out_date 记录的记录。
这样简单来说就是从考勤表中获取所有未设置 in_date 和 out_date 的记录。如果两者都设置,则不要获取记录。
这是我到目前为止的查询,不确定我的方法是否正确:
SELECT
`E`.`employee_id` AS EmployeeID,
`E`.`full_name` AS EmployeeNam,
`ATT`.`in_date` AS EmployeeInDate,
`ATT`.`out_date` AS EmployeeOutDate,
`ATT`.`in_time` AS EmployeeInTime,
`ATT`.`out_time` AS EmployeeOutTime
FROM
(`employee` E)
INNER JOIN `employment` ET
ON `E`.`employee_id` = `ET`.`employee_id`
AND ET.current = 1
INNER JOIN `employee_project` EP
ON `E`.`employee_id` = `EP`.`employee_id`
LEFT JOIN `attendence` ATT
ON `ATT`.`employee_id` = `E`.`employee_id`
INNER JOIN `posting` P
ON `P`.`employement_id` = `ET`.`employment_id`
AND P.current = 1
AND P.status = 2
WHERE `E`.`enrolled` = 1 -- AND ATT.`in_date` = CURDATE() - 1 OR ATT.`in_date` = CURDATE()
GROUP BY `E`.`employee_id`
这是我现在得到的记录:
我在哪里试过这个
AND ATT.`in_date` = CURDATE() - 1 OR ATT.`in_date` = CURDATE()
不确定获取今天和昨天日期的正确方法?如果不正确,还请说明获取今天和以前日期的正确方法。
另外它没有让我得到空日期的记录,我如何获得空日期?
空箱注意事项: 我只想要空的情况下,如果员工今天没有出勤所以它是空的,那么我想要今天的空或最后一天的空(如果存在)(不是所有的空记录)。
更新
这次我尝试了 UNION 方式,但是对于 NULL,联合也联合了两个空值?那么如何区分 null 是在哪个日期呢?
SELECT
`E`.`employee_id` AS EmployeeID,
`E`.`full_name` AS EmployeeNam,
`ATT`.`in_date` AS EmployeeInDate,
`ATT`.`out_date` AS EmployeeOutDate,
`ATT`.`in_time` AS EmployeeInTime,
`ATT`.`out_time` AS EmployeeOutTime
FROM
(`employee` E)
INNER JOIN `employment` ET
ON `E`.`employee_id` = `ET`.`employee_id`
AND ET.current = 1
INNER JOIN `employee_project` EP
ON `E`.`employee_id` = `EP`.`employee_id`
LEFT JOIN `attendence` ATT
ON `ATT`.`employee_id` = `E`.`employee_id` AND ATT.`in_date` = CURDATE() - 1 -- Get Yesterdays Records
INNER JOIN `posting` P
ON `P`.`employement_id` = `ET`.`employment_id`
AND P.current = 1
AND P.status = 2
WHERE `E`.`enrolled` = 1
GROUP BY `E`.`employee_id` , ATT.in_date
UNION
SELECT
`E`.`employee_id` AS EmployeeID,
`E`.`full_name` AS EmployeeNam,
`ATT`.`in_date` AS EmployeeInDate,
`ATT`.`out_date` AS EmployeeOutDate,
`ATT`.`in_time` AS EmployeeInTime,
`ATT`.`out_time` AS EmployeeOutTime
FROM
(`employee` E)
INNER JOIN `employment` ET
ON `E`.`employee_id` = `ET`.`employee_id`
AND ET.current = 1
INNER JOIN `employee_project` EP
ON `E`.`employee_id` = `EP`.`employee_id`
LEFT JOIN `attendence` ATT
ON `ATT`.`employee_id` = `E`.`employee_id` AND ATT.`in_date` = CURDATE() -- Get Todays Dates
INNER JOIN `posting` P
ON `P`.`employement_id` = `ET`.`employment_id`
AND P.current = 1
AND P.status = 2
WHERE `E`.`enrolled` = 1
GROUP BY `E`.`employee_id`
【问题讨论】:
-
您需要不考虑天数?...这意味着您只需要未设置 in_date 和 out_date 正确的记录!!!!!!!
-
@Vamshi.goli 是的,这就是我想要的..
-
我希望这个逻辑可以帮助你......当 in_date 或 out_date 中有 null 时,然后获取那些记录