我有一个数据库,我将主要关注两个表。表1将emp_id作为主键
表1存储每位员工的访问信息。我的任务是计算员工进入房间的时间。
表1
emp_id time_in time_out, other columns etc
1111 3:00 3.30
2222 1:00 1:10
3333 2:00 2:45
4444 7:00 5:00
表2
sequence_no,emp_id,时间,访问类型,其他列等
表2有多个enties条目
sequence_no, emp_id, time, access type
10000 1111 3:00 granted
10221 1111 3:23 granted
19911 2222 x
12122 1111 x
23232 3333
我写了sQl查询,显示连接两个表,
但目前我正在尝试添加一个总和条目总和的列(由于序列号,我的查询返回多行)
select e.emp_id,a.sequence_no,count(sequence_no) from employee, access a where e.emp_id = a.emp_id
group by e.emp_id having count t(1) > 1
输出应该看起来像
emp_id, sequence number, time in/out , total_counts
1111 10000 3:30 5
1111 12122 3:30 5
2222 19911 2:20 19
在结果中,我需要序列号,这将导致重复的emp_id,但每个ID的总数应该是相同的;
答案 0 :(得分:1)
你不需要分组任何东西:
select
e.emp_id,
a.sequence_no,
count(sequence_no) over (partition by e.emp_id) as total_counts
from employee, access a
where e.emp_id = a.emp_id
如果您想过滤少于两个条目的emps:
select *
from
(
select
e.emp_id,
a.sequence_no,
count(sequence_no) over (partition by e.emp_id) as total_counts
from employee, access a
where e.emp_id = a.emp_id
)
where total_counts >= 2;
如果你想通过emp分组,在Oracle中(我不知道sqlserver中的语法是否正常)你可以使用keep
:
select
e.emp_id,
max(a.sequence_no) keep (dense_rank first order by time desc), --last sequence
count(sequence_no)
from employee, access a
where e.emp_id = a.emp_id
group by e.emp_id
having count(*) > 1;