我正在尝试制作一份报告,以确定是否有任何客户(patient_id)在我们的系统中有重复约会。我有proc_chron(开始时间到第二个),proc_chron_end(结束时间到第二个)和proc_duration的字段。预先感谢您的任何帮助。
select
patient_id,
attending_id,
proc_duration,
proc_chron,
proc_chron_end
from patient_clin_tran
where place_of_service not in ('23', '24', '25', '26')
and (proc_chron between '2015-06-01' and '2015-09-01')
and billing_proc_code not in ('BHHMTH')
答案 0 :(得分:1)
这会告诉你你在哪些地方进行了研磨预约:
AlertDialog alertDialog = alertDialogBuilder.create();
我所做的只是将您的查询包装在一个公用表表达式中,并将其与患者ID自身连接起来。然后,where子句仅过滤重叠但不包括相同约会的任命。
答案 1 :(得分:1)
通常会在exists
子句中添加一个带有相关子查询的where
谓词,将结果限制为重叠的约会。
select
patient_id,
attending_id,
proc_duration,
proc_chron,
proc_chron_end
from patient_clin_tran p -- notice the table alias
where place_of_service not in ('23', '24', '25', '26')
and (proc_chron between '2015-06-01' and '2015-09-01')
and billing_proc_code not in ('BHHMTH')
and case when exists (
select 1 from patient_clin_tran
where patient_id = p.patient_id
and attending_id <> p.attending_id
and p.proc_chron < proc_chron_end
and p.proc_chron_end > proc_chron
) then 1 else 0 end = 1
order by p.patient_id, p.attending_id;
Sample SQL Fiddle包含一些虚数据。
这仅检查具有不同attending_id
的重叠约会。如果您要检查具有相同参加者的重叠,则必须删除and attending_id <> p.attending_id
,而是添加唯一标识每一行的条件,以便约会不会与自身重叠。