获得结果的一种方法是使用相关子查询:
更新
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
您注意到您希望WSC 的最大值小于 JDAY;我认为这意味着您希望Table2 中 JDAY 值小于 Table1 行中 JDAY 值的行中的 WSC 最大值。这似乎与您显示的结果集相符。(如果我弄错了(我可能有),那是我的误解,阅读了一些你不打算的东西,如果是这样,请随时纠正我。)
更新
我有一个更好的理解,您希望表 2 中具有比表 1 中的 JDAY 值早的最大 JDAY 值的行中的 WSC 值。您希望 WSC 从具有最新较早日期的行中获取。我的答案中的查询已修改以满足此要求。
获得基本相同结果集的另一种方法是使用 theta-join(即,不等式谓词的连接)
更新
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 值,这将起作用。如果有重复值,您需要有一种方法来消除返回的任何重复值。添加 aGROUP BY t.JDAY
就足够了,但不是确定性的。(也就是说,您无法保证从哪一行获得 WSC 值。)
在这里,我们要求 Table1 中的每一行,以及 Table2 中的任何“匹配”行,匹配 Table2 中的 JDAY 小于 Table1 中的 JDAY。对于 Table1 中的每一行,我们将翻阅 Table2 中的所有“匹配”行(如果有),我们将从 Table2 中挑选出与 JDAY 匹配的最大WSC 值,并将其返回到别名为 t 的子查询(内联视图)中。然后,我们可以将该结果集连接回 Table2,以获取匹配的行以及该行上的 WSC 值。
当表 1 中有 JDAY 的“重复”值时,这些查询之间的一个区别就会发挥作用,它们将返回略有不同的结果集。第一个查询将返回 Table1 中的所有行,包括 JDAY 的重复值。第二个查询将从表 1 中删除 JDAY 的重复值,并返回一组不同的 JDAY 值。
更新:
我已经更新了上面的答案,没有得到MAX(WSC)
值,而是从 Table2 中最接近的 JDAY 小于 Table1 JDAY 的行中获取 WSC 值。