每24个月检查完成一次培训

时间:2019-07-12 15:34:03

标签: sql sql-server

我正在尝试找出所需的正确查询,以检查用户自从开始工作以来是否每隔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

2 个答案:

答案 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;