SQL Anywhere 9 查找重复项

问题描述 投票:0回答:1

好吧,我之前问过这个问题,但没有收到回复,所以我尝试了一种稍微不同的方式。

我们有以下脚本可以在数据库中查找重复的患者...

SELECT count((Pquery.Last_Name || '_' || Pquery.First_Name|| '_' || Pquery.Date_Of_Birth)) as PatientCount,

(Pquery.Last_Name || '_' || Pquery.First_Name|| '_' || Pquery.Date_Of_Birth) as PatientString

FROM
(SELECT Name AS Last_Name, Other_Names AS First_Name, DOB as Date_Of_Birth
FROM dba.patient) as Pquery
GROUP BY PatientString
HAVING PatientCount > 1
ORDER BY PatientString ASC, PatientCount DESC;
OUTPUT TO 'c:\duplicates.csv'

脚本运行良好并拉出重复的患者。

一位客户询问我们是否可以提供其他信息,例如患者 ID 号。

我遇到的问题是,对于上面的脚本,如果我告诉它选择患者 ID 号作为 PID,它无法匹配某些患者,因为它随后尝试匹配患者 ID,但并非所有条目都包含 PID。例如...

如果我在不选择 PID 的情况下运行脚本,我会得到以下结果...

2_A_Patient_01011980 2_B_Patient_01022010 2_C_Patient_21101999

该脚本选择了 3 名患者,每名患者都有 2 条重复记录,因为它与姓氏、名字和出生日期相匹配。

如果我要求它选择患者 ID,我可以得到以下信息...

2_A_Patient_01011980_12345678

这是因为脚本找到了与患者 A 的名字、姓氏、出生日期和 PID 匹配的匹配项,但在患者 B 和患者 C 上没有 PID 匹配,因此即使我们知道有两个重复记录,也不会将它们选为重复项.

问题是我们正在合作的网站有超过 13000 条重复的患者记录,但他们要求我们提供患者 ID 和地址信息。

有什么方法可以使用我的原始脚本提取重复患者的列表,然后使用该脚本中的信息提取患者 ID 和地址?

我不是脚本专家,除了我自己拼凑的一些知识之外,我们内部没有任何 SQL 知识。

支持我们支持的应用程序的公司不会为客户脚本提供脚本支持,也不会为客户站点上使用的过时软件版本提供脚本支持。

谢谢

详细如上。

sql sqlanywhere
1个回答
0
投票

尝试使用聚合函数而不是传统的分组,例如

SELECT 
    *
FROM (
   SELECT
        PID
      , Name AS Last_Name
      , Other_Names AS First_Name
      , DOB as Date_Of_Birth
      , count(*) over(partition by PatientString order by PID) as count_of
    FROM dba.patient) as Pquery
    ) d
WHERE count_of > 1

这里的优点是您可以从源数据中输出任意数量的列。请注意,

partition by
group by

的替代品
© www.soinside.com 2019 - 2024. All rights reserved.