句を使用して、そこに条件を書き込んだり、発生をカウントしてフィルタリングしたりすることができます。 not exists
とサンプルSQL:
select t1.*
from t t1
where userid <> some_other_id and phn_id = 1322
and not exists (select 1 from t t2
where t1.rowid <> t2.rowid and t1.userid = t2.userid
and t1.date1 = t2.date1 and t1.date2 = t2.date2
and t1.date3 = t2.date3 and t1.date4 = t2.date4)
編集:上記古いクエリは動作しませんあなたの更なる明確化した後、私の考えは次のとおりです。
select *
from (
select t.*,
count(1) over (partition by userid) cnt_phn,
count(distinct some_other_id) over (partition by userid) cnt_id,
count(1) over (partition by userid, date1, date2, date3, date4) cnt_dt
from t where phn_id = 1322)
where cnt_phn > 1 and cnt_id > 1 and cnt_dt = 1
order by userid, some_other_id
あなただけの内側のクエリを実行した場合のことができます。各user_idについて:cnt_phn
番号1322の電話番号、cnt_id
- このユーザの別個のsome_other_idの数、および各タプルの日付をカウントするcnt_dt
- を参照してください。 外部クエリは、条件に基づいてデータをフィルタリングします。更新されたサンプルデータでは、期待通りにユーザー4のみが表示されます。問題が見つかった場合、このクエリに調整が必要な場合がありますが、目標を達成するには2通りの方法があります。exist
と分析関数です。お役に立てれば。
テストデータ:
create table t (Userid number(3), some_other_id number(3), phn_id number(6), date1 date, date2 date, date3 date, date4 date);
insert into t values (3, 21, 1322, date '2015-12-09', date '1999-12-31', date '2000-01-01', date '9999-12-31');
insert into t values (3, 22, 1322, date '2015-12-09', date '1999-12-31', date '2000-01-01', date '9999-12-31');
insert into t values (4, 23, 1322, date '2015-08-21', date '2006-08-25', date '2003-10-01', date '9999-12-31');
insert into t values (4, 24, 1322, date '2015-08-21', date '1999-12-31', date '2006-08-25', date '9999-12-31');
insert into t values (5, 22, 1322, date '2015-12-09', date '1999-12-31', date '2000-01-01', date '9999-12-31');
insert into t values (5, 22, 1322, date '2003-10-01', date '2006-08-25', date '2000-01-01', date '9999-12-31');
insert into t values (6, 23, 1321, date '2015-08-21', date '2006-08-25', date '2003-10-01', date '9999-12-31');
insert into t values (6, 24, 1322, date '2015-08-21', date '2015-12-31', date '2006-08-25', date '9999-12-31');
出力:
USERID SOME_OTHER_ID PHN_ID DATE1 DATE2 DATE3 DATE4
------ ------------- ------- ----------- ----------- ----------- -----------
4 23 1322 2015-08-21 2006-08-25 2003-10-01 9999-12-31
4 23 1322 2015-08-21 1999-12-31 2006-08-25 9999-12-31
あなたが疑問明確にするために、いくつかのサンプルデータは、テーブル構造、そのデータのために必要な結果に応じて、あなたのテーブル構造を投稿してください、何これまでのところ、あなたのコードで問題が発生しました。ここであなたは[ask]と[mcve]に役立つものを見つけました – Aleksej
私はすでにテーブルコードスニペットを掲示しています。コードスニペットを実行して、テーブル構造とサンプルデータを確認してください。 – Nitin