我有两张桌子,像这样:
master
---------
empcode INT PRIMARY KEY
name VARCHAR
dept VARCHAR
emp_tx
----------
empcode INT references MASTER(empcode)
s_date DATETIME
该emp_tx
表记录了员工“进”和“出”的交易。该列s_date
存储“in”或“out”事件发生的时间(作为 DATETIME 值)。交易记录从办公区域(通过指纹生物识别系统)。
emp_tX 表中的示例数据:
empcode s_datetime
------- ------------------
1110 2012-12-12 09:31:42 (employee in time to the office)
1110 2012-12-12 13:34:17 (employee out time for lunch)
1110 2012-12-12 14:00:17 (employee in time after lunch)
1110 2012-12-12 18:00:12 (employee out time after working hours)
1112
etc.
注意:emp_tx
如果员工在给定日期不在办公室,则不会在该日期的事务表中
插入任何行。员工在给定日期缺勤将由该员工和该日期的“缺失”行指示。
谁能帮我获取一个返回员工缺勤日期的 SQL 查询,以生成员工缺勤报告?
查询的输入将是两个 DATE 值,一个“开始”日期和一个“结束”日期,它指定日期范围。查询应该返回所有出现的“缺席”(或者,当在“从”和“到”日期之间的任何日期在EMP_TX
表中没有找到任何行时,不出现而不是,非出现。empcode
预期输出:
如果我们输入“2012-12-12”作为“开始”日期,“2012-12-20”作为“结束”日期,查询应该返回如下行:
Empcode EmpName Department AbsentDate TotalNoofAbsent days
------- ------- ---------- ----------- --------------------
1110 ABC Accounts 2012-12-12
1110 ABC Accounts 2012-12-14 2
1112 xyz Software 2012-12-19
1112 xyz Software 2012-12-17 2
我试过这个查询,我确信它没有返回我想要的行:
select tx.date from Emp_TX as tx where Date(S_Date) not between '2012-12-23' and '2012-12-30'
谢谢。