如果患者因为从数据库中预约而迟到了,我想研究一下。
我有一个来自诊所的数据表,其中包含以下列:
它看起来像这样:
Pt Appt Next_appt
12 2013-04-22 2013-05-21
12 2013-05-20 2013-07-15
57 2010-06-08 2010-07-05
57 2010-08-03 2010-10-19
127 2009-02-24 2009-06-23
127 2009-04-20 2009-05-11
因此对于患者12 - 他在2013-05-21被分配了next_appt日期,他参加了2013-05-20(提前1天)
将Next_appt列向下移动一个然后减去两个就很容易,但随后我会遇到麻烦,因为日期会对应不同的患者。
数据库中约有20,000名患者(!)。
我想知道是否有人可以给我一些建议?
谢谢,
答案 0 :(得分:0)
试试这个:
select
t1.*,
case sign(t2.appt - t1.next_appt)
when 0 then 'on time'
when 1 then 'late'
when -1 then 'early' end
from
your_table t1
left join
your_table t2
on
t1.pt = t2.pt -- shift down with pt as join condition
and t1.appt < t2.appt