在不了解更多数据结构的情况下,您似乎有一些状态字段,用于识别收到的申请数据的“阶段”以安排面试。您可能希望根据每个相应的“状态”ID 对根表执行多个 JOIN。
因此,让我们假设您的状态代码具有一些连续的序列上下文
1 = Application Received
2 = Reviewed
3 = Rejected
4 = Interview
5 = Hired
如果应用程序以状态 1 进入,那么它在历史/更改日志表中永远不会有任何内容对吗?所以,如果你在历史上找不到任何东西,它是一个新的应用程序。一旦更改为“已审核”状态 (2),已接收 (1) 将进入历史记录,依此类推。那准确吗?或者,状态历史表中是否总是有一个条目,即使在收到的第一个条目上也是如此。如果是这样,那将在您进行时简化一些。
SELECT
T1.Application_ID,
T1.FirstName,
T1.LastName,
T1.ApplicationTimestamp AS 'Application Received On',
-- now compute differences... Only doing days, but you get the idea
DATEDIFF(DAY, coalesce( Received.Application_ID, now(),
T1.ApplicationTimeStamp )
as TimeSinceReceived,
-- if there is a reviewed record, there should at least be the
-- application original entry too
case when Reviewed.Application_ID IS NULL
then 0
else
DATEDIFF(DAY, coalesce( Reviewed.StatusTimeStamp, now() ),
coalesce( Received.StatusTimeStamp, T1.ApplicationTimeStamp )) end
as TimeToReview,
-- if there is a Rejected record, there should at least be the
-- application original entry too
case when Rejected.Application_ID IS NULL
then 0
else
DATEDIFF(DAY, coalesce( Rejected.StatusTimeStamp, now() ),
coalesce( Reviewed.StatusTimeStamp, T1.ApplicationTimeStamp )) end
as TimeToReject
etc... for interviewed and hired as applicable
FROM
dbo.Application T1
LEFT JOIN dbo.ApplicationStatusHistory Received
ON T1.Application_ID = Received.Application_ID
-- Status application received
AND Received.StatusID = 1
LEFT JOIN dbo.ApplicationStatusHistory Reviewed
ON T1.Application_ID = Reviewed.Application_ID
-- Status application Reviewed
AND Reviewed.StatusID = 2
LEFT JOIN dbo.ApplicationStatusHistory Rejected
ON T1.Application_ID = Rejected.Application_ID
-- Status application Rejected
AND Rejected.StatusID = 3
LEFT JOIN dbo.ApplicationStatusHistory Interview
ON T1.Application_ID = Interview.Application_ID
-- Status application Interviewed
AND Interview.StatusID = 4
LEFT JOIN dbo.ApplicationStatusHistory Hired
ON T1.Application_ID = Hired.Application_ID
-- Status application Hired
AND Hired.StatusID = 5
WHERE
T1.ApplicationTimestamp BETWEEN '2020-01-01' AND '2020-12-31'