SQL 查询从 3 table 内部联接获得多个结果
SQL Query getting multple results from 3 table inner join
我是 运行 一个 sql 查询(使用 Microsoft Report Builder)加入三个 table 并得到重复项,我似乎无法阻止它。
我有一个 table (tableA),其中包含相关字段 ownerID、属性ID、vacationDate。我想找到所有者的名字和他们所在的最新属性。(他们可能已经在几个属性中,我只对最新的感兴趣)所有者名称保留在所有者table 并由 ownerID 链接,属性 地址位于 属性table 下并由 属性ID 链接。我试图让每个 OwnerID 具有最新的假期日期和那个特定的 属性ID,然后在内部连接两个 tables 以获取姓名和地址。我试过 selecting 'max(vacation)' 然后 GROUP BY,但我遇到了问题,因为我正在使用报表生成器并且必须在所有字段上使用 group by 子句而不仅仅是 OwnerID,这会出现每个人的最近休假日期 属性。请有人能让我走上正轨。非常感谢。
我所做的示例;
抱歉,我不在我的电脑上,无法提供准确的示例,如果有帮助,这里是一个简化版本。
table A
ownerid propertyid vacation
1 2 1991
2 5 1993
1 3 1992
1 4 1997
2 6 2000
2 9 2007
所以我想 select 每个拥有上次假期的 属性 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
我想你必须写一个子查询到
" to get each OwnerID with the latest vacation date" as bellow
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
我是 运行 一个 sql 查询(使用 Microsoft Report Builder)加入三个 table 并得到重复项,我似乎无法阻止它。
我有一个 table (tableA),其中包含相关字段 ownerID、属性ID、vacationDate。我想找到所有者的名字和他们所在的最新属性。(他们可能已经在几个属性中,我只对最新的感兴趣)所有者名称保留在所有者table 并由 ownerID 链接,属性 地址位于 属性table 下并由 属性ID 链接。我试图让每个 OwnerID 具有最新的假期日期和那个特定的 属性ID,然后在内部连接两个 tables 以获取姓名和地址。我试过 selecting 'max(vacation)' 然后 GROUP BY,但我遇到了问题,因为我正在使用报表生成器并且必须在所有字段上使用 group by 子句而不仅仅是 OwnerID,这会出现每个人的最近休假日期 属性。请有人能让我走上正轨。非常感谢。
我所做的示例;
抱歉,我不在我的电脑上,无法提供准确的示例,如果有帮助,这里是一个简化版本。
table A
ownerid propertyid vacation
1 2 1991
2 5 1993
1 3 1992
1 4 1997
2 6 2000
2 9 2007
所以我想 select 每个拥有上次假期的 属性 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
我想你必须写一个子查询到
" to get each OwnerID with the latest vacation date" as bellow
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