【发布时间】:2016-05-20 11:04:54
【问题描述】:
我有 3 张桌子:
-
Person(附一栏PersonKey) -
Telephone(包括Tel_NumberKey、Tel_Number、Tel_NumberType列,例如 1=home、2=mobile) -
xref_Person+Telephone(列PersonKey、Tel_NumberKey、CreatedDate、ModifiedDate)
我希望从xref_Person+Telephone 中为每个Person 获取最新的(例如最高的Tel_NumberKey),并使用该Tel_NumberKey 从Telephone 表中获取实际的Tel_Number。
我遇到的问题是我不断收到相同Tel_NumberKey 的重复项。我还需要确保我从 Telephone 表中获得了家庭和移动设备,我一直希望通过每个 Tel_NumberType 的 2 个单独的连接来完成 - 再次得到重复。
尝试了以下方法,但无济于事:
-- For HOME
SELECT
p.PersonKey, pn.Phone_Number, pn.Tel_NumberKey
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 -- e.g. Home phone number
AND pn.Tel_NumberKey = (SELECT MAX(pn1.Tel_NumberKey) AS Tel_NumberKey
FROM Person AS p1
INNER JOIN xref_Person+Telephone AS x1 ON p1.PersonKey = x1.PersonKey
INNER JOIN Telephone AS pn1 ON x1.Tel_NumberKey = pn1.Tel_NumberKey
WHERE pn1.Tel_NumberType = 1
AND p1.PersonKey = p.PersonKey
AND pn1.Tel_Number = pn.Tel_Number)
ORDER BY
p.PersonKey
并且一直在查看以下链接,但仍然不断重复。
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 个表格时很难获得最新/最高值。非常感谢任何帮助。
【问题讨论】:
-
仅供参考尝试使用oracle ANALYTICAL Functions
-
标记使用的 dbms,答案可能因产品而异。
-
您使用的是哪个 DBMS?
-
我正在使用 MS SSMS 2012
标签: sql sql-server sql-server-2012 greatest-n-per-group