SQL 查询 - 在小于或等于日期时加入
Posted
技术标签:
【中文标题】SQL 查询 - 在小于或等于日期时加入【英文标题】:SQL Query - join on less than or equal date 【发布时间】:2014-04-20 06:01:57 【问题描述】:我无法确定如何格式化以下查询。我想参加Table A
并离开加入Table B
。不仅在a.country = b.country
上,而且在小于等于join_date
的max start_date
上。
Postgres(红移)
表 A
ID join_date country email
----- ----------- --------- ------
124 '2013-10-03' US john@doe.com
423 '2013-04-21' CA bob@doe.com
412 '2013-03-30' US test@test.com
表 B
start_date country joined_from
------------- ----------- --------------
'2013-08-21' US google
'2014-01-02' CA yahoo
'2013-03-02' CA microsoft
'2013-02-10' US facebook
'2013-09-01' US yahoo
最终结果
ID join_date country email start_date joined_from
------ ----------- --------- --------- ------------ -------------
124 '2013-10-03' US john@doe.com '2013-09-01' yahoo
423 '2013-04-21' CA bob@doe.com '2013-03-02' microsoft
412 '2013-03-30' US test@test.com '2013-02-10' facebook
【问题讨论】:
你试过什么?SELECT * from A a LEFT JOIN B b on a.country = b.country WHERE b.start_date <= a.join_date
不起作用?
@PiotrGwiazda 我不这么认为,因为他想要最大日期小于 join_date 的行,而不是该表中的每一行
Lamak 是正确的,谢谢
【参考方案1】:
不漂亮,但将您的条件直接放在JOIN
中应该可以:
SELECT a.ID, a.join_date, a.country, a.email, b.start_date, b.joined_from
FROM a LEFT JOIN b ON a.country = b.country
AND b.start_date = (
SELECT MAX(start_date) FROM b b2
WHERE b2.country = a.country AND b2.start_date <= a.join_date
);
【讨论】:
太棒了!也适用于我的情况以上是关于SQL 查询 - 在小于或等于日期时加入的主要内容,如果未能解决你的问题,请参考以下文章