在下文中,我们计算患者未出席医疗预约的次数(NOSHOW)。它是基于如果他们没有显示当天,那么我们从过去显示他们的计数。我怎样才能得到他们没有展示的部门?我们有6个不同的医疗部门,所以经理想要看看问题是仅针对牙科医生,还是针对所有人。这将有助于他们预订某人等。
SELECT Distinct
Appt_DateTime j,
Patient_Name j,
Appt_Status j,
Appt_Sched_Department_ID j,
Appt_Sched_Department_Descr j,
Patient_id j,
Patient_number j,
Appt_NoShow_Date j,
ISNULL(P.NotShowCount,0) AS NotShowCount
FROM
vwGenPatInfo vwGenPatInfo j
INNER JOIN vwGenPatApptInfo vwGenPatApptInfo ON vwGenPatInfo.Patient_ID=vwGenPatApptInfo.Patient_ID
LEFT JOIN (
SELECT Patient_ID, COUNT(Appt_Status) AS NotShowCount
FROM (SELECT Appt_DateTime, Appt_Status, Appt_Sched_Department_ID, Appt_Sched_Department_Descr, Appt_NoShow_Date, Patient_ID
FROM vwGenPatapptInfo AS vwGenPatApptInfo
WHERE (Appt_Status = 'N') AND (Appt_DateTime < DATEADD(day, DATEDIFF(day, 0, GETDATE()), - 1))) AS L
GROUP BY
Patient_ID) AS P ON vwGenPatInfo.Patient_ID=P.Patient_ID
WHERE
vwGenPatApptInfo.Appt_Status='N'
ORDER BY
vwGenPatApptInfo.Appt_Sched_Department_ID,
vwGenPatApptInfo.Appt_DateTime
目前的数据是这样的:最后一个数字是先前noshows的数量。所以我们想像成人医学_NS 3,Dental_NS 9那样打破这个。日期时间显示是前一天的noshow。呼叫室将呼叫他们重新安排。
Patient_Name Appt_Sched_Departmen Appt_NoShow_Date Previous No Show Count
8/31/2016 No Shows 8/30/2016
Patient_number
Sinca Blay Adult Medicine 8/30/2016 12:05:46PM 12
Wiske Semns Adult Medicine 8/30/2016 5:25:32PM 4
Rose Alhar Adult Medicine 8/30/2016 5:57:01PM 6
答案 0 :(得分:1)
您可以使用analytic,aggregate和ranking窗口函数。
这是一个未经测试的查询,可以为您提供一个想法:
SELECT Patient_ID,
Patient_Name,
Appt_Sched_Department_ID,
Appt_Sched_Department_Descr,
Appt_NoShow_Date_Today,
Appt_NoShow_Date_Prev,
NotShowCount
FROM (SELECT app.Patient_ID,
pat.Patient_Name,
app.Appt_Sched_Department_ID,
app.Appt_Sched_Department_Descr,
app.Appt_DateTime AS Appt_NoShow_Date_Today,
LEAD(app.Appt_DateTime)
OVER (PARTITION BY app.Patient_ID
ORDER BY app.Appt_DateTime DESC) AS Appt_NoShow_Date_Prev,
COUNT(app.Appt_Status)
OVER (PARTITION BY app.Patient_ID) AS NotShowCount,
ROW_NUMBER()
OVER (PARTITION BY app.Patient_ID
ORDER BY app.Appt_DateTime DESC) AS rn
FROM vwGenPatApptInfo app
INNER JOIN vwGenPatInfo pat
ON pat.Patient_ID = app.Patient_ID
WHERE app.Appt_Status = 'N'
) AS base
WHERE rn = 1
AND Appt_NoShow_Date_Today >= DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
ORDER BY Appt_Sched_Department_ID,
Appt_NoShow_Date_Today
内部查询获取状态为“N”的所有记录,但添加信息:
Appt_NoShow_Date_Prev
:如果记录按降序Appt_DateTime
排序,则下一条记录的Appt_DateTime
值(对于同一患者:这是“窗口”)。NotShowCount
:该窗口中的记录数。rn
:该窗口中的顺序记录编号,当记录按降序Appt_DateTime
排序时。外部查询仅保留记录rn = 1
,这意味着:每位患者最近Appt_DateTime
的记录。作为第二个条件,这Appt_DateTime
必须是今天(在午夜之后):这确保我们只列出今天缺席的患者。