以下のような内容のテーブルが 2 つあります。
Table 1:
ID1 ID2 ID3 ID4 NAME DESCR STATUS date
1 -12134 17773 8001300701101 name1 descr1 INACTIVE 20121203
2 -12136 17773 8001300701101 name1 descr1 INACTIVE 20121202
3 -12138 17785 9100000161822 name3 descr3 INACTIVE 20121201
4 -12140 17785 9100000161822 name3 descr3 ACTIVE 20121130
5 -12142 17787 8000500039106 name4 descr4 ACTIVE 20121129
Table2:
ID1 ID2 ID3 ID4 NAME DESCR
0 17781 17773 8001300701101 name1 descr1
0 17783 17783 8001300060109 name2 descr2
0 17785 17785 9100000161822 name3 descr3
0 17787 17787 8000500039106 name4 descr4
0 17789 17789 0000080052364 name5 descr5
私は結果を下回ろうとしています。
ID3 ID4 NAME DESCR STATUS date
17773 8001300701101 name1 descr1 INACTIVE 20121202
17783 8001300060109 name2 descr2 NULL NULL
17785 9100000161822 name3 descr3 ACTIVE 20121201
17787 8000500039106 name4 descr4 ACTIVE 20121129
17789 0000080052364 name5 descr5 NULL NULL
上記の i/p および o/p に従って、列 id3、id4、name、および desc に基づいて 2 つのテーブルを結合する必要があります。アクティブなレコードが存在する場合は、アクティブなレコードを返す必要があります。ただし、非アクティブなレコードのみが存在する場合は、最も古い非アクティブなレコードを結合する必要があります。
私が望んでいた答えに近づかなくなったさまざまなクエリを試しました。結合された 4 つの列はすべて非プライマリ フィールドですが、null ではありません。2 つのテーブル間には、1 対多または多対多の関係があります。
私は Apache phoenix に取り組んでおり、ソリューションが Hadoop Mapreduce または Apache Spark にある場合も問題ありません。
私が書いたサンプルクエリは次のとおりです。
Select table2.*, table1.status, table1.date
From table1 Right outer join table2 on table1.id3 = table2.id3
and table1.id4 = table2.id4
and table1.name = table2.name
and table1.descr = table2.descr
Order by (status) and order by (date)
誰でも私を助けてもらえますか?