SQL查找重叠约会

时间:2015-08-28 13:18:56

标签: sql sql-server-2008-r2

我正在尝试制作一份报告,以确定是否有任何客户(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')

2 个答案:

答案 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,而是添加唯一标识每一行的条件,以便约会不会与自身重叠。