次のような2つのテーブルを結合しようとしています:
表 A
A1, A2, A3
A, 1, 35
A, 1, 70
A, 1, 105
表 B
B1,B2, B3
B, 1, 30
C, 1, 32
D, 1, 40
E, 1, 55
F, 1, 60
G, 1, 77
H, 1, 80
期待される結果は次のようになります。
A, 1, 35, C, 32
A, 1, 70, F, 60
A, 1, 105, H, 80
つまり、テーブル A のすべての行に対して、テーブル B から 1 行だけを選択します。これは、B3 の値が小さいが、A3 の値に最も近い行でなければなりません。
これまでのところ、次のクエリを試しました。
SELECT A1, A2, A3, B1, B3 FROM A JOIN (SELECT B1, B2, B3 FROM B ORDER BY B2, B3 DESC) AS A ON A.A2 = B.B2 AND A.B3 < A.A3
ただし、これは次のような表になります。
A, 1, 35, B, 30
A, 1, 35, C, 32
A, 1, 70, B, 30
A, 1, 70, C, 32
A, 1, 70, D, 40
A, 1, 70, E, 55
など。また、内側の SELECT に LIMIT 1 を追加しようとしましたが、結果は得られません。内部クエリを単独で (LIMIT 1 で) 実行すると、期待どおりの結果が得られます。目的の結果が得られるようにクエリを変更するにはどうすればよいですか? 現在、sqlite を使用していますが、これを他の DBMS に移植可能な方法で記述したいと考えています。