SQL查询从3个表内连接获取多个结果

时间:2018-02-11 17:08:35

标签: sql inner-join reportbuilder ingres multiple-join-rows

我正在运行一个SQL查询(使用微软报表生成器)连接三个表并获得重复项,我似乎无法阻止它。

我有一个表(tableA),它包含相关字段ownerID,propertyID,vacationDate。我想找到所有者的名字和他们所在的最新房产。(他们可能已经在几个房产中,我只对最新房产感兴趣)房主名称在Ownertable上持有,并由ownerID和房产链接地址在propertytable下找到,并由propertyID链接。我试图让每个OwnerID获得最新的休假日期和特定的propertyID然后内部加入两个表来获取名称和地址。我已经尝试选择'max(vacation)'然后选择GROUP BY,但是我遇到了问题,因为我正在使用报表生成器,并且必须在所有字段上使用group by子句而不仅仅是OwnerID,这将显示最新的vac日期每个人的财产以及。有人可以让我走上正轨。非常感谢。

我所做的一个样本;

对不起我不能在我的电脑上提供一个精确的样本这里是一个简化版本,如果这有帮助。

table A

ownerid      propertyid      vacation
1            2               1991
2            5               1993
1            3               1992
1            4               1997
2            6               2000
2            9               2007

所以我想为每个拥有最后一个假期的属性ID的所有者选择一行,对于这个例子,我希望如下所示

ownerid     propertyid    vacation
1           4             1997
2           9             2007

我在下面尝试了这个但是重复了。

SELECT tableA.propertyid, tableA.ownerid, MAX(tableA.vacation), propertytable.propertyname, ownertable.ownername FROM tableA 

INNER JOIN propertytable on tableA.propertyid = propertytable.id

INNER JOIN Ownertable on tableA.ownerid = ownertable.id

GROUP BY tableA.property, tableA.owner, propertytable.propertyname, ownertable.ownername

1 个答案:

答案 0 :(得分:0)

我认为你必须写一个子查询到

  

“以最新的假期日期获取每个OwnerID”,如下所示

    SELECT
rs.ownerid,
rs.propertyid,
rs.vacation
FROM
(
SELECT
ownerid,
propertyid,
vacation,
MAX(vacation) OVER(PARTITION BY ownerid) AS maxDate
FROM  TableA

 ) as rs  

  WHERE rs.vacation = rs.maxDate