SQL - 如何让在特定日期范围内缺席的员工

时间:2018-04-23 01:10:48

标签: sql

我有员工和时间卡表。当员工点击“time in”按钮时,日期时间(UTC)将保存在Timecard表中。我已经可以使用以下查询检索员工:

SELECT emp.id, emp.Firstname, emp.Lastname
FROM Employees emp
WHERE emp.Id NOT IN (SELECT ti.EmployeeId 
                     FROM TimeCards ti
                     WHERE ti.[Date] BETWEEN '2018-04-22 16:00:00' AND '2018-04-23 15:59:00')

但问题是,我还需要在Timecard表中包含日期时间,因此输出应为:EmployeeId,Firstname,Lastname,TimeCardDate。另外,我需要按日期范围(例如4月19日 - 4月23日)获取记录

你能帮我找到解决方法吗?感谢

3 个答案:

答案 0 :(得分:0)

您可以使用join:

SELECT e.id, e.Firstname, e.Lastname, t.TimeCardDate
FROM Employees e JOIN TimeCards t
     ON e.id = t.EmployeeId
     AND t.[Date] NOT BETWEEN '2018-04-19 16:00:00' AND '2018-04-23 15:59:00'

答案 1 :(得分:0)

我理解你的问题,你想加入这两个表,让员工和他们的时间进入"。像下面这样的东西应该做。

SELECT emp.id,
       emp.Firstname,
       emp.Lastname,
       ti.Date
       FROM Employees emp
            INNER JOIN TimeCards ti
                       ON ti.EmployeeId = emp.Id
       WHERE ti.Date BETWEEN '2018-04-22 16:00:00' AND '2018-04-23 15:59:00';

答案 2 :(得分:0)

我认为你需要的是一个LEFT JOIN,它将带来employee表的所有记录和时间表的匹配记录。那么,如果缺席的员工,您将获得NULLS。



trans -e google -s fr -t en -show-original y -show-original-phonetics n -show-translation y -no-ansi -show-translation-phonetics n -show-prompt-message n -show-languages y -show-original-dictionary n -show-dictionary n -show-alternatives n "%GDWORD%"