T-SQL查找没有预订后续应用程序的最新客户记录



我有客户应用程序表:

ID PK
CID FK
ApptDate
Status ( it could be; awaiting response, cancelled, did not attend, attended)

客户表:

CID PK
Name
SUrname
address etc.

每个客户都预订了多个约会,我的任务是找到最后一个状态为"未参加"的约会,并且客户没有预订任何后续应用程序。。

我尝试过子查询,但没有成功。。也尝试过这个:

select ID, CID, max(ApptDate)
from customer_appts
where status!= 'Attended'

这不是在检查是否没有预订任何后续应用程序。。我想我需要使用if语句或嵌套。。如果有人能指引我,我将不胜感激

更新:示例:客户ID:20的应用程序记录--它应该返回最后一个记录日期23/20/20--在该日期之后没有预订后续应用程序,并且状态未参与

ID  CID Appt Date   Status
1   20  27/01/20    Not Attended
2   20  30/01/20    Attended
3   20  23/02/20    cancelled

更多示例

ID  CID Appt Date   Status
1   30  27/01/20    Not Attended
2   30  30/01/20    Cancelled
3   30  23/02/20    Attended

对于客户30,它不应该返回任何记录,因为在"取消"应用程序之后,我们为他们预订了预约,状态为"已参加">

我想你正在努力找出哪个客户自上次错过约会以来没有约会。注意,我假设id是一个标识列,与订购日期一样好。

这里有一种方法…

SELECT *
FROM customer_appts a
WHERE
status <> 'Attended'
AND NOT EXISTS (
SELECT 1
FROM customer_appts
WHERE cid = a.cid AND id > a.id
)

这是另一个。。。

SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER(PARTITION BY cid ORDER BY id DESC) AS ordering
FROM customer_appts
) a
WHERE 
a.ordering = 1
AND status <> 'Attended'

SQL FIDDLE

我的任务是查找状态为"未出席"的最后一个约会。

我想你想要:

select a.*
from customer_appts a
where a.id = (select top (1) a2.id
from customer_appts a2
where a2.cid = a.cid and
a2.status <> 'Attended'
order by a2.ApptDate desc
);

相关内容

最新更新