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_datemax 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 查询 - 在小于或等于日期时加入的主要内容,如果未能解决你的问题,请参考以下文章

sql这个语句怎么写条件,小于2010-4-1的订单日期

年龄小于20岁和大于20岁的sql语句怎么写

vue element ui 开始日期小于或等于结束日期

查询两个日期相差的月数和剩下的天数

sql 小于等于,80这个数值, a库 lev表,小于80这个数值则增加 5 怎么解决! 语句怎么写

asp中sql查询语句中大于小于怎么表示