我有客户应用程序表:
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
);