还有其他方法可以解决涉及员工数据的SQL问题吗?

时间:2020-09-12 12:20:54

标签: sql sql-server rdbms

公司在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()

2 个答案:

答案 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;