我有3张桌子:
Person
(列PersonKey
)Telephone
(列Tel_NumberKey
,Tel_Number
,Tel_NumberType
,例如1 =家庭,2 =移动)xref_Person+Telephone
(列PersonKey
,Tel_NumberKey
,CreatedDate
,ModifiedDate
)我希望从每个Tel_NumberKey
的{{1}}获取最新版本(例如最高xref_Person+Telephone
)并使用Person
获取实际Tel_NumberKey
1}}来自Tel_Number
表。
我遇到的问题是我一直在为Telephone
获取重复项。我还需要确保从Tel_NumberKey
表中获取主页和移动设备,我一直希望通过每个Telephone
的2个单独连接来完成 - 再次获得重复项。
尝试以下但无济于事:
Tel_NumberType
一直在查看以下链接,但又一次重复。
SQL select max(date) and corresponding value
How can I SELECT rows with MAX(Column value), DISTINCT by another column in SQL?
SQL Server: SELECT only the rows with MAX(DATE)
我确定这一定是可能的,但已经过了几天,并且无法相信在引用3个表时难以获得最新/最高价值。任何帮助非常感谢。
答案 0 :(得分:2)
select *
from
( SELECT p.PersonKey, pn.Phone_Number, pn.Tel_NumberKey
, row_number() over (partition by p.PersonKey, pn.Phone_Number order by pn.Tel_NumberKey desc) rn
FROM
Persons AS p
INNER JOIN
xref_Person+Telephone AS x ON p.PersonKey = x.PersonKey
INNER JOIN
Telephone AS pn ON x.Tel_NumberKey = pn.Tel_NumberKey
WHERE
pn.Tel_NumberType = 1
) tt
where tt.rn = 1
ORDER BY
tt.PersonKey
答案 1 :(得分:0)
你必须使用max()函数,然后你必须按降序排序rownum,如。
select f.empno
from(select max(empno) empno from emp e
group by rownum)f
order by rownum desc
它将为所有员工编号最高的员工提供最低的员工编号。现在用你的案例实现它然后让我知道。