2

我正在尝试查询 Oracle 中的审计表,以提取文档在给定时间范围内的受欢迎程度(唯一命中数)的列表。

到目前为止,我开发的 SQL 是:

select distinct dt.name "Document name", ku.name "User name", count(*) "Number of hits" 
  from dauditnew da, 
       kuaf ku, 
       dtree dt 
 where ku.id=da.performerid 
   and (da.auditstr='Fetch') 
   and dt.dataid = ANY(DOCID1,DOCID2) 
   and da.dataid = ANY(DOCID1,DOCID2) 
   and da.auditdate between TO_DATE('01-JAN-12') and TO_DATE('31-OCT-12') 
 group by dt.name, ku.name

它会吐出类似于以下内容的数据:

Document name       User name           Hit count
document1.pdf   rimnet\user1    1
document1.pdf   rimnet\user2    1
document1.pdf   rimnet\user3    17
document1.pdf   rimnet\user4    1
document2.pdf   rimnet\user5    1
document1.pdf   rimnet\user6    1
document3.pdf   rimnet\user7    1

但我真正需要的是对结果进行分组并对每个唯一用户进行一次计数:

Document name       User name           Hit count
document1.pdf       n/a                 5
document2.pdf       n/a                 1
document3.pdf       n/a                 1

谁能指出我正确的方向?

4

1 回答 1

2

根据您想要的结果,听起来您只想要用户计数而不是点击次数(否则,聚合 17 次点击 + 1 次点击 + 1 次点击 + 1 次点击 + 1 次点击是没有意义的并以 5 次命中结束)。如果是这样的话

select dt.name "Document name", count(distinct ku.name) "Distinct users" 
  from dauditnew da, 
       kuaf ku, 
       dtree dt 
 where ku.id=da.performerid 
   and (da.auditstr='Fetch') 
   and dt.dataid = ANY(DOCID1,DOCID2) 
   and da.dataid = ANY(DOCID1,DOCID2) 
   and da.auditdate between TO_DATE('01-JAN-12') and TO_DATE('31-OCT-12') 
 group by dt.name
于 2012-11-08T18:42:57.733 回答