0

データベースに単純なテーブルがあり、ここにerror_id、error_group_id、およびmessageの列があります。メッセージと各エラーグループの発生を示すリストをUIに表示したいと思います。

エラーメッセージはわずかに異なる場合があります(たとえば、設定Xは日付で期限切れになります)。たとえば、日付は変更される可能性がありますが、グループ化に使用される定義済み定数からのハッシュであるerror_group_idは変更されません(たとえば、( AssemblyName + "設定の有効期限が切れました").GetHashCode()。

現在、メッセージ付きのグループを一覧表示できます。

 SELECT message, error_group_id
 FROM (SELECT error_id, message, error_group_id,
 rank() OVER ( PARTITION BY error_group_id ORDER BY error_id) rank
 FROM cc_errors)
 WHERE rank <= 1;

出力:(ランダムに1つ選択するだけ)メッセージ、グループハッシュ。(グループごとに1回のみ)。

ただし、グループ内にある個々のエラーメッセージの数に関する情報が必要です(グループをダブルクリックすると、個々のエラーのリストを表示するウィンドウが開きます)。このSQL句の各グループの発生をカウントしたいと思います。

したがって、必要な出力は次のとおりです(グループごとに1行)。

メッセージ、グループハッシュ、グループ内のメッセージの数。

プロジェクトはデータベースとしてOracleを使用しています。

誰かがこれを手伝ってもらえますか:P

4

2 に答える 2

5

現在のクエリにを追加できCOUNTます。

SELECT message, error_group_id, cnt
  FROM (SELECT error_id,
               message,
               error_group_id,
               rank() OVER (PARTITION BY error_group_id ORDER BY error_id) rank,
               count(*) OVER (PARTITION BY error_group_id) cnt
          FROM cc_errors)
 WHERE rank <= 1;
于 2012-07-12T13:08:14.367 に答える
0

私はあなたが探していると思いますgroup by

 select distinct c.message, c.error_group_id, t.error_group_count
   from cc_errors c
           inner join
        (select error_group_id, count(*) as error_group_count
           from cc_errors
          group by error_group_id) t  on t.error_group_id = c.error_group_id

これはあなたが要求したものを返しますが、意味をなさないようです。私はこれを行います:グループIDを持つすべてのメッセージを返し、グループIDをクリックしたときに、select count(*) from cc_errors where error_group_id = @groupId

于 2012-07-12T12:49:12.280 に答える