首页 > 解决方案 > SQL:修改内连接以选择一行

问题描述

我有两个表,AB想在location. 但是,对于 中的每一行A,有许多行匹配。我想最终得到与. 具体来说,我想排在最早的位置。这是我到目前为止所拥有的:BlocationABdate

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)

这是正确的方法吗?

标签: sql

解决方案


您可以使用 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;

推荐阅读