这里是东西,我必须要桌子,我想加入它们。但是,我想基于一个相等和另一个比较来带来这些值。就像我要在两个表的id相同并且表1的另一列必须在表2的同一列之下时带值一样。这是我的两个表:
表1(销售表):
id produts_sold month
A1 100 '2020-01-01'
A3 500 '2020-01-01'
A1 100 '2020-02-01'
A2 300 '2020-02-01'
A3 200 '2020-02-01'
A1 400 '2020-04-01'
A2 500 '2020-04-01'
A1 400 '2020-06-01'
A1 500 '2020-08-01'
表2(价格表-显示价格何时更新)
id price month
A1 100 '2019-12-01'
A2 200 '2019-12-01'
A3 300 '2019-12-01'
A1 200 '2020-02-01'
A1 400 '2020-03-01'
这是东西,我想带我桌子的价格更新。但是我没有每个月的价格,只是价格有所更新。基本上,我的最终表是这样:
id produts_sold month price
A1 100 '2020-01-01' 100
A3 500 '2020-01-01' 300
A1 100 '2020-02-01' 200
A2 300 '2020-02-01' 200
A3 200 '2020-02-01' 300
A1 400 '2020-04-01' 400
A2 500 '2020-04-01' 200
A1 400 '2020-06-01' 400
A1 500 '2020-08-01' 400
这是到目前为止我尝试过的:
select t1.*, t2.price
from table_1 t1
left join table_2 t2
on t1.id=t2.id and t1.month > t2.month
但是,效果不好。由于2月20日在12月19日之后,但是4月20日也在12月19日之后,所以我可能会得到3月的4月价格,而不是2月的价格。我怎样才能使这个左连接正确?
您可以使用横向连接:
select t1.*, t2.price
from table_1 t1 left join lateral
(select t2.*
from table2 t2
where t2.id = t1.id and t2.month < t1.month
order by t2.month desc
limit 1
) t2
on true;
请注意,通常在进行此类比较时,比较将使用<=
而不是<
。