公司在3列的表格中记录员工进出办公室的情况
(Employee id, Action (In/Out), Created)
。
每个员工的第一个条目是“ In”。 每个“ In”都由“ Out”代替。没有数据缺口,员工可以跨天工作。
Employee id Action Created
1 In 2019-04-01 12:00:00
1 Out 2019-04-01 15:00:00
1 In 2019-04-01 17:00:00
1 Out 2019-04-01 21:00:00
1。)查找当前办公室内的员工人数。以下是我的尝试。
Select sum(case when Action = 'IN' then 1 when Action = 'OUT' then -1 end) from Company where Created = getdate()
答案 0 :(得分:0)
假定没有空隙。
Select sum(case when Action = 'IN' then 1 when Action = 'OUT' then -1 end) from Company where Created <= getdate();
或者,下面没有任何where子句。该数字在该时间点的那一刻是正确的-
Select sum(case when Action = 'IN' then 1 when Action = 'OUT' then -1 end) from Company
答案 1 :(得分:0)
如果员工在建筑物中,则其最新的[操作]设置为“进入”,并且没有相应的“离开”操作。像这样
with entry_cte as (
select *, row_number() over (partition by employee_id order by created desc) rn)
select count(*) in_building_count
from entry_cte ec
where [action]='In'
and rn=1;