【发布时间】:2018-12-06 16:52:25
【问题描述】:
下面是我的客户表的示例。有些记录在 BIRTHDAY DATE 中有多个值(错误地左右)。我只想选择那些 LASTNAME、MIDDLENAME、FIRSTNAME、SSN 值相同但生日不同的记录:
成员表
LASTNAME MIDDLENAME FIRSTNAME SSN BIRTHDAY
Jones M Carol 1234 17-DEC-45
Jones M Carol 1234 17-DEC-45
Jones M Carol 4425 20-APR-70
Black S Ted 5555 15-MAY-57
Roberts T Cole 1412 14-MAY-57
Roberts T Cole 1412 20-OCT-57
Roberts S Cole 1412 15-MAY-57
我希望结果是:
LASTNAME MIDDLEANME FIRSTNAME SSN BIRTHDAY
Roberts T Cole 1412 14-MAY-57
Roberts T Cole 1412 20-OCT-57
请注意,表中具有相同 SSN 或全名的帐户很少,它们没有被选中,因为它们的所有内容都不相同。同样没有选择 SSN 为 1234 的 Jones M. Carol,因为她没有两个不同帐户的不同生日。
这是我到目前为止的 SQL 查询,它不一定能正常工作,因为它显示的结果没有我不想看到的重复。
SELECT x.FIRST_NM, x.MDL_NM, x.LAST_NM, x.SSN, x.BRTH_DT
FROM Member_table x
WHERE EXISTS
(
SELECT FIRST_NM, MDL_NM, LAST_NM, SSN, COUNT(*)
from Member_table
WHERE CURRENT_RECORD_IN = 'Y'
group by FIRST_NM, MDL_NM, LAST_NM, SSN
having count(distinct BRTH_DT) > 1
)
ORDER BY FIRST_NM ASC, LAST_NM ASC, MDL_NM ASC, SSN ASC;
对这个查询有什么建议吗?
【问题讨论】:
-
您需要一个条件 x.FIRST_NM = sub.FIRST_NM AND x.MDL_NM = sub.MDL_NM ... etc... 在您的 EXISTS 子句中。
标签: sql oracle select distinct