我在一个名为activity的表中有数据,其中包含有关诊所时间的信息,当约会开始时和结束时,这些插槽使用scheduleID标识唯一标识一个插槽,我有其他列,其中包含有关是否一个人参加了这个时段(参加,DNA,取消)。
我的任务是计算重新预订费率,找出已取消的插槽数量以及取消的日期(dateiff)以及随后是否重新预订以及重新预订的日期。
我编写了一个查询,该查询在给定时间段内选择已取消的appt数量,这会给出一个已取消的所有appt插槽的列表,例如。 scheduleID,date_apptmentstart,apptend,是否参加,(例如参加,取消),约会被取消的日期,是否重新预订了插槽以及有人参加。
然后我将表加入到自身以查找插槽是否已重新预订,这可以返回多行(重复),因为插槽可以在有人参加之前预订和取消多次,我需要找到时间之间的差异插槽被取消了,当它被r-ebooked和有人参加。我需要使用下面的结果集来计算重新订阅率。我认为我有正确的结果集,即根据是否重新预订来查找canceldate和slotdate(即apptstartdate)之间的约会,谢谢。
创建表约会 如
CREATE TABLE [dbo].[appointments](
[scheduleID] [int] NOT NULL PRIMARY KEY CLUSTERED,
[Apptstartdate] [datetime] NOT NULL,
[Apptenddate] [datetime] NOT NULL,
[attend_description] [nvarchar](50) NOT NULL
[datecancelled] (datetime) NULL
[clinicsession] nvarchar (30) NOT NULL
GO
select
a.scheduleID,
a.clinicsession
a.apptstartDate,
a.apptendDate,
a.Attend_description,
a.Datecancelled,
datediff(day, b.canceldate,a.appt_startdate) as daysTocancel,
b.scheduleid,
b.apptstartDate,
b.apptendDate,
b.appt_Createdate,
b.attend_description,
b.canceldate,
case
when a.canceldate is null then 1 else
0 end as [SlotFilled]
FROM Activity as a
inner join Activity as b
on a.scheduleid=b.scheduleid and
b.apptstartdate>=b.apptstartdate
where left(a.attend_description,4) = 'canc' and
a.ApptSTARTdate between '03-apr-2018' and '04-apr-2018'