我正在尝试找出所需的正确查询,以检查用户自从开始工作以来是否每隔24个月完成一次特定的培训类型。用户需要每24个月完成一定的培训。
SELECT userid, completiondate
FROM trainingevent
INNER JOIN emplpoyment e
ON e.userid = trainingevent.userid
WHERE userid = 1007
AND trainingtype = 5
案例1:假设聘用开始日期为5/15/2017,那么,如果该培训类型在5/15/2017和5/15/2019之间的任何时间完成,则用户应显示完成日期。
案例2:假设聘用开始日期为5/15/2017,那么,如果该培训类型在5/15/2019和5/15/2021之间的任何时间完成,则用户应显示完成日期。
预期结果应该是:如果用户完成了培训
1007 5/15/2018
预期结果应为:如果用户未完成培训
1007 NULL
答案 0 :(得分:1)
我认为这也需要一些汇总,因为我认为员工可能会根据OP的描述进行多次培训。所以也许是这样?
SELECT e.userid,
MAX(CASE WHEN te.completiondate > DATEADD(MONTH, -24, GETDATE()) THEN te.completiondate END)
FROM dbo.employment e
LEFT JOIN dbo.trainingevent te ON e.userid = te.userid
AND te.trainingtype = 5
WHERE e.userid = 1007
GROUP BY e.userid;
答案 1 :(得分:0)
如果我的理解正确,那么您只关心最近24个月内完成的培训日期。这是apply
的好用例:
SELECT e.userid, te.completiondate
FROM dbo.employment e OUTER APPLY
(SELECT TOP (1) MAX(te.completiondate) as completiondate
FROM dbo.trainingevent te
WHERE e.userid = te.userid AND
te.trainingtype = 5 AND
te.completiondate > DATEADD(MONTH, -24, GETDATE())
) te
WHERE e.userid = 1007
GROUP BY e.userid;