SQL - 跨3个表

时间:2016-05-20 11:04:55

标签: sql sql-server sql-server-2012 greatest-n-per-group

我有3张桌子:

  1. Person(列PersonKey
  2. Telephone(列Tel_NumberKeyTel_NumberTel_NumberType,例如1 =家庭,2 =移动)
  3. xref_Person+Telephone(列PersonKeyTel_NumberKeyCreatedDateModifiedDate
  4. 我希望从每个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个表时难以获得最新/最高价值。任何帮助非常感谢。

2 个答案:

答案 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

它将为所有员工编号最高的员工提供最低的员工编号。现在用你的案例实现它然后让我知道。