結果を取得する1つの方法は、相関サブクエリを使用することです。
更新しました
SELECT t1.JDAY
, (SELECT t2.WSC FROM Table2 t2
WHERE t2.JDAY < t1.JDAY
ORDER BY t2.JDAY DESC LIMIT 1
) AS WSC
FROM Table1 t1
ORDER BY t1.JDAY
あなたは、JDAYよりも小さいWSCの最大値が必要だと述べました。これは、Table1行のJDAY値よりも少ないJDAY値を持つTable2の行のWSCの最大値が必要であることを意味します。これは、表示している結果セットと一致しているようです。(私がそれを間違えた場合(私が持っているかもしれません)、それは私の誤解であり、あなたが意図していなかったものを読んでいました。もしそうなら、遠慮なく私を訂正してください。)
アップデート
私はよりよく理解しています。表1のJDAY値よりも前の最大のJDAY値を持つ表2の行からのWSCの値が必要です。日付が最も早い行のWSCが必要です。私の回答のクエリは、この要件を満たすように変更されています。
基本的に同じ結果セットを取得する別の方法は、シータ結合(つまり、不等式述語の結合)を使用することです。
更新しました
SELECT t.JDAY
, s.WSC
FROM ( SELECT t1.JDAY
, MAX(t2.JDAY) AS max_t2_jday
FROM Table1 t1
LEFT
JOIN Table2 t2
ON t2.JDAY < t1.JDAY
GROUP BY t1.JDAY
ORDER BY t1.JDAY
) t
LEFT
JOIN Table2 s
ON s.JDAY = t.max_t2_jday
表2にJDAYの「重複」値がない限り、これは機能します。重複する値がある場合は、返される重複を排除する方法が必要になります。を追加するGROUP BY t.JDAY
だけで十分ですが、決定論的ではありません。(つまり、どの行からWSC値を取得したかは保証されません。)
ここでは、Table1のすべての行と、Table2の「一致する」行を要求しています。Table2のJDAYで一致するのは、Table1のJDAYよりも少ないです。Table1の各行について、Table2からすべての「一致する」行(存在する場合)を調べ、Table2からJDAYに一致する最大のWSC値を選択し、tとしてエイリアスされたサブクエリ(インラインビュー)に返します。次に、その結果セットをTable2に結合して、一致する行とその行のWSC値を取得できます。
これらのクエリの違いの1つは、表1にJDAYの「重複した」値がある場合に発生し、わずかに異なる結果セットを返します。最初のクエリは、JDAYの重複値を含む、Table1のすべての行を返します。2番目のクエリは、表1からJDAYの重複する値を削除し、JDAYの個別の値のセットを返します。
アップデート:
上記の回答を更新しましたが、MAX(WSC)
値は取得していませんが、代わりに、Table1JDAYよりも小さい最も近いJDAYを持つTable2の行からWSC値を取得しています。