ステータスを順位付けするテーブルを作るとよいかと
/* 初期値 - 検証のためテーブル1のデータを増やしてます */
create table テーブル1(ID int,名前 varchar(20),日付1 date,日付2 date,ステータス1 int null,ステータス2 int null);
create table テーブル2(ID int,名前 varchar(20),日付1 date,日付2 date,ステータス1 int null,ステータス2 int null);
create table テーブル3(ID int,名前 varchar(20),日付1 date,日付2 date,ステータス1 int null,ステータス2 int null);
insert into テーブル1 values(111,'あああ','2001/1/1','2001/1/1',2,2),(222,'いいい','2001/1/1','2001/1/1',2,2),(333,'ううう','2001/1/1','2001/1/1',null,null),(555,'おおお','2001/1/1','2001/1/1',2,2),(666,'かかか','2001/1/1','2001/1/1',null,0);
insert into テーブル2 values(111,'aaa','2002/2/2','2002/2/2',0,null),(222,'iii','2002/2/2','2002/2/2',1,0),(333,'uuu','2002/2/2','2002/2/2',null,null),(444,'eee','2002/2/2','2002/2/2',1,1);
insert into テーブル3 values(111,'あああ','2001/1/1','2002/2/2',2,2),(222,'いいい','2001/1/1','2002/2/2',1,2),(444,'eee','2002/2/2','2002/2/2',1,1),(555,'おおお','2001/1/1','2001/1/1',2,2);
/* ステータスの順位付けテーブルを作る */
create table ステータス(status int null,rank int);
insert into ステータス values(1,1),(2,2),(0,3)
/* 集計 */
select
ID,日付1,日付2,st3.status as ステータス1,st4.status as ステータス2
from(
select ID,MIN(日付1) AS 日付1,MAX(日付2) AS 日付2
,MIN(st1.rank) as r1
,MIN(st2.rank) as r2
from (
select * from テーブル1
union all select * from テーブル2
union all select * from テーブル3
) uni1
left join ステータス as st1 on uni1.ステータス1=st1.status
left join ステータス as st2 on uni1.ステータス2=st2.status
GROUP BY ID
having r1 is not null or r2 is not null
) uni2
left join ステータス as st3 on uni2.r1=st3.rank
left join ステータス as st4 on uni2.r2=st4.rank
お礼
あ、昨日に引き続きありがとうございます。 おかげさまで完成させることが出来ました。