事情是这样的。我有两张table:
表a:
id col1 date_x
A xxxx 2020-02-02
B yyyy 2020-02-02
C zzzz 2020-02-02
表b
id col2 date_y
A yyyy 2020-01-02
A yyyy 2020-02-02
A yyyy 2020-03-02
我想在date\u y是可能的最高值时带来col2,但它必须低于date\u x。
我就是这么做的:
select *,
(
select top 1 col2
from table_B
where table_B.date_y < a.date_x
and table_B.id = a.id
) as col2
from table_A a
现在,我还想带上dateïy,以便做一些验证。
最好的方法是什么?我想创建另一个(选择前1…),但这似乎非常低效。另一个连接也将是低效的。
2条答案
按热度按时间w80xi6nr1#
您可以根据自己的条件加入表并使用
MAX()
以及FIRST_VALUE()
窗口函数来获取date_y
以及col2
价值观:你可以改变主意
LEFT
加入INNER
如果您只想从这两个表中得到匹配的行,请使用join。请看演示。
7d7tgy0s2#
使用相关子查询的方法是可以的,并且支持红移
top
(虽然我更喜欢limit
,这在其他数据库中得到了更广泛的支持)。但是你错过了一个
order by
子查询中的子句-如果没有它,则会从满足where
条款,这不是你想要的。我建议:
对于性能,请考虑
table_B(id, date_y, col2)
.