我有一个名为Employee的表。在此表中,我有一个员工ID和一个员工姓名。我有另一张名为出勤的表,其中包含员工ID(FK),日期,预计时间,时间和时间状态。我想找到约翰·布朗迟到的所有记录。
这就是表格的样子:
员工表
| emp_id | emp_name |
| 1 | John Brown |
| 2 | Bob Marley |
| 3 | Rob West |
出勤表:
| emp_id | Date | expected_time |time_in|time_status|
| 1 | 12-Sep-18 | 8:30 |8:50 |Late |
| 2 | 12-Sep-18 | 8:30 |8:23 |On-Time |
| 3 | 12-Sep-18 | 8:30 |8:15 |On-Time |
结果应如下所示:
| emp_id | emp_name | Date | time_in |
| 1 | John Brown | 12-Sep-18 | 8:50 |
| 1 | John Brown | 17-Sep-18 | 9:00 |
| 1 | John Brown | 27-Sep-18 | 8:47 |
您将如何在SQL查询中表达这一点。另外我如何检查确定迟到的时间,比如说如果通过8:00你被认为迟到了?
答案 0 :(得分:2)
plain sql:
select
e.emp_id, e.emp_name, a.Date, a.time_in
from
employee e
join attendance a on e.emp_id = a.emp_id
where
a.time_status = 'Late'
假设Late是一个固定的字符串,而不是你随机输入的东西
答案 1 :(得分:1)
SELECT e.emp_id, e.emp_name, Date, time_in
FROM Employee as e inner join Attendance as a
ON e.emp_id = a.emp_id
WHERE a.expected_time < a.time_in
AND emp_name = 'John Brown'
答案 2 :(得分:0)
如果您想根据时间和预期时间指定“延迟”或“开启时间”,则查询将
SELECT
e.emp_id,
e.emp_name,
a.Date,
a.time_in,
(case when a.time_in > a.expected_time then 'Late' else 'On-time') as Time_status
FROM
Employee as e,
Attendance as a
where
e.emp_id = a.emp_id
答案 3 :(得分:0)
这听起来像是在寻找计算列。请注意,我认为time_in
在您的实际插入上只是GETDATE()
。但在这里,我们使用静态值进行测试。在下面的DDL中,time_status
是基于expected time
和time_in
的计算列。如果time_in
大于expected_time
,则我们将其标记为延迟,否则他们按时。如果你想给它们一个5分钟的阈值,或者其他什么,你可以使用这个逻辑。
<强> CLICK HERE FOR ONLINE DEMO 强>
create table #EmployeeTable (
emp_id int identity (1,1),
emp_name varchar(64)
)
go
create table #AttendanceTable (
emp_id int,
[Date] date,
expected_time time,
time_in time,
time_status as cast(case when time_in > expected_time then 'Late' else 'On-Time' end as varchar(64))
)
go
insert into #EmployeeTable
values
('John Brown'),
('Bob Marley'),
('Rob West')
insert into #AttendanceTable
values
(1,'20180912','08:30','08:50'),
(2,'20180913','08:30','08:23'),
(3,'20180914','08:30','08:15')
select
e.emp_name
,a.*
from
#EmployeeTable e
inner join
#AttendanceTable a on a.emp_id = e.emp_id
drop table #AttendanceTable
drop table #EmployeeTable