重複するエントリを検索するSQL(グループ内)
私には小さな問題があり、データベース(Oracle)自体へのアクセスが制限されているため、それを修正するための最良の方法がわかりません。テーブル「EVENT」には約16万のエントリがあり、各EVENTにはGROUPIDがあり、通常のエントリには同じGROUPIDを持つ正確に5つの行があります。バグが原因で、現在、いくつかの重複エントリが取得されています(重複しているため、5行ではなく10行で、EVENTIDが異なります。これは変更される可能性があるため、<> 5です)。これらのグループのすべてのエントリをフィルタリングする必要があります。
データベースへのアクセスが制限されているため、一時テーブルを使用することも、GROUPID列にインデックスを追加して高速化することもできません。
このクエリでGROUPIDを取得できますが、必要なデータを取得するには2番目のクエリが必要になります
select A."GROUPID"
from "EVENT" A
group by A."GROUPID"
having count(A."GROUPID") <> 5
1つの解決策は、副選択です。
select *
from "EVENT" A
where A."GROUPID" IN (
select B."GROUPID"
from "EVENT" B
group by B."GROUPID"
having count(B."GROUPID") <> 5
)
GROUPIDと160kエントリのインデックスがないと、これには非常に時間がかかります。これを処理できる結合について考えてみましたが、これまでのところ適切な解決策を見つけることができません。
誰かがこれに対する良い解決策を見つけることができるかもしれませんか?
小さな編集:ここでは100%重複していません。これは、各エントリに一意のIDがあり、GROUPIDも一意ではないためです(そのため、「group by」を使用する必要があります)。それ :)
データに関する小さな例(削除したくないので、見つけてください)
EVENTID | GROUPID | TYPEID
123456 123 12
123457 123 145
123458 123 2612
123459 123 41
123460 123 238
234567 123 12
234568 123 145
234569 123 2612
234570 123 41
234571 123 238
タイムスタンプなど、さらにいくつかの列がありますが、すでにわかるように、EVENTIDを除いてすべてが同じです。
テスト、バグの発見、再発の有無の確認のために、より頻繁に実行します。