好吧,我之前问过这个问题,但没有收到回复,所以我尝试了一种稍微不同的方式。
我们有以下脚本可以在数据库中查找重复的患者...
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 知识。
支持我们支持的应用程序的公司不会为客户脚本提供脚本支持,也不会为客户站点上使用的过时软件版本提供脚本支持。
谢谢
详细如上。
尝试使用聚合函数而不是传统的分组,例如
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
的替代品