SQL:修改内部联接以选择一行

时间:2018-07-18 19:23:34

标签: sql

我有两个表,AB,我想在location上进行内部联接。但是,对于A中的每一行,B中有许多行与location相匹配。我想最终得到的行数最多与A中的行数相同。具体来说,我想在B最早的地方date中进行选择。这是我到目前为止的内容:

SELECT * 
FROM A 
INNER JOIN B ON A.location = B.location

我将如何修改它,以使A中的每一行仅与B中的一行(使用最早的date)连接在一起?

尝试:

SELECT * 
FROM A 
INNER JOIN B ON A.location = B.location 
             AND B.date = (SELECT MIN(date) FROM B)

这是正确的方法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用ANSI / ISO标准row_number()函数:

SELECT *
FROM A INNER JOIN
     (SELECT B.*, ROW_NUMBER() OVER (PARTITION BY B.location ORDER BY B.date) as seqnum
      FROM B
     ) B
     ON A.location = B.location AND seqnum = 1;

答案 1 :(得分:0)

选择顶部(1)*从A 内连接B A.LOCATION = B.LOCATION 在B.DATE之前订购