获取两个表oracle sql中重复项的计数

时间:2015-08-27 03:07:35

标签: sql database oracle

我有一个数据库,我将主要关注两个表。表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的总数应该是相同的;

1 个答案:

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