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

しかし、私が本当に必要としているのは、結果をグループ化し、各ユニーク ユーザーを 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 に答える