Попробуйте это sql fiddle
Данные
create table acct_and_ssn (
acct int,
ssn varchar(255)
);
insert into acct_and_ssn (acct, ssn)
values
(1, 123456789),
(2, 123456789),
(3, 123456789),
(4, 223456789),
(5, 223456789),
(6, 333456789),
(7, 333456789),
(8, 333456789),
(9, 444567889),
(10, 444567889)
;
create table acct_and_date (
acct int,
mydate date
);
insert into acct_and_date (acct, mydate)
values
(2, '06/30/2019'),
(6, '06/30/2019'),
(9, '04/12/2019')
;
Счета 2 и 6 соответствуют нашим строгим критериям.SSN, связанные с 2 и 6, также связаны с учетными записями 1, 3, 7 и 8.
with flagged_accounts_cte (acct, ssn) as
(
select
a.acct,
a.ssn
from
acct_and_ssn a inner join acct_and_date b
on a.acct = b.acct and b.mydate = '06/30/2019'
)
select
c.acct,
c.ssn,
(case
when c.acct = d.acct then 1 else 0
end) as myflag
from
acct_and_ssn c
inner join flagged_accounts_cte d
on c.ssn = d.ssn
Создайте подзапрос (здесь выполняется как CTE), который идентифицирует закрытые учетные записи, а затем объединяет их обратнодо таблицы с номерами SSN для поиска других учетных записей.
Дает нам
acct ssn myflag
1 123456789 0
2 123456789 1
3 123456789 0
6 333456789 1
7 333456789 0
8 333456789 0