您可以使用not exists
子句並在其中編寫條件或某些分析函數來計算出現次數,然後對其進行過濾。樣品SQL與not exists
:
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,如預期的那樣。如果您發現任何問題,此查詢可能需要調整,但在此您有兩種方法可以實現您的目標: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
爲了澄清你的疑問,請根據表結構,該數據所需要的結果,一些示例數據發佈你的表結構,有什麼你到目前爲止嘗試過以及你的代碼存在的問題。在這裏,你可以在[問]和[mcve] – Aleksej
上找到一些有用的信息,我已經發布了表格代碼片段。請運行代碼片段並檢查表結構和示例數據。 – Nitin